如何在令牌中存储令牌?

时间:2020-03-23 16:40:57

标签: .net authentication asp.net-core jwt

我有一个API,该API会向我返回一个令牌,使用该令牌,我可以向该API发出更多请求,现在我将令牌存储在会话中,但是我认为使用会话无法达到使用令牌的目的我想知道如何将令牌存储在cookie中?下面是我获取令牌并将其写入会话的代码:-

public async Task<string> GetToken(bool tokenExpired)
{
    if (_context.HttpContext.Session.GetString("token") != null && tokenExpired == false)
    {
        return _context.HttpContext.Session.GetString("token");
    }

    var authClient = _httpClientFactory.CreateClient("Auth");

    var dict = new Dictionary<string, string>
    {
        { "grant_type", "client_credentials" },
        { "client_id", "my_client_id" },
        { "client_secret", "my_client_secret" }
    };
    var res = await authClient.PostAsync(authClient.BaseAddress, new FormUrlEncodedContent(dict));

    if (res.StatusCode == HttpStatusCode.OK)
    {
        var authentication = JsonConvert.DeserializeObject<Authentication>(res.Content.ReadAsStringAsync().Result);

        _context.HttpContext.Session.SetString("token", authentication.Access_Token);

        return authentication.Access_Token;
    }
    else
    {
        throw new Exception();
    }
}

此令牌在60分钟后过期,因此我也必须注意这一点,并且我仅使用此令牌来访问一个特定的端点,而不会将其用于身份验证或授权。我要进行哪些更改,以便可以将其存储在Cookie或本地存储中?

1 个答案:

答案 0 :(得分:1)

我要进行哪些更改,以便可以将其存储在Cookie或本地存储中?

正如我们在评论中所讨论的,要将获得的令牌存储在cookie中,您可以使用以下代码段:

HttpContext.Response.Cookies.Append("token", authentication.Access_Token, 
    new Microsoft.AspNetCore.Http.CookieOptions { Expires = DateTime.Now.AddMinutes(expires_in) });

然后,您可以检查客户端是否已获取令牌,以及代码中的现有令牌是否已过期,如下所示。

var token = "";

if (HttpContext.Request.Cookies.TryGetValue("token",out token) && tokenExpired == false)
{
    return token;
}
return token;
//...
//code logic here