Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在cookie中存储令牌?_.net_Authentication_Asp.net Core_Jwt - Fatal编程技术网

.net 如何在cookie中存储令牌?

.net 如何在cookie中存储令牌?,.net,authentication,asp.net-core,jwt,.net,Authentication,Asp.net Core,Jwt,我有一个API,它会返回一个令牌,使用该令牌我可以向API发出更多请求,现在我正在会话中存储令牌,但是我认为使用会话会破坏使用令牌的整个目的,因此我想知道如何将令牌存储在cookie中?下面是我获取令牌并将其写入会话的代码:- public async Task<string> GetToken(bool tokenExpired) { if (_context.HttpContext.Session.GetString("token") != null &&

我有一个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();
    }
}
public异步任务GetToken(bool令牌过期)
{
if(_context.HttpContext.Session.GetString(“令牌”)!=null和&tokenExpired==false)
{
返回_context.HttpContext.Session.GetString(“令牌”);
}
var authClient=_httpClientFactory.CreateClient(“Auth”);
var dict=新字典
{
{“授权类型”、“客户端凭据”},
{“客户id”,“我的客户id”},
{“客户秘密”,“我的客户秘密”}
};
var res=等待authClient.PostAsync(authClient.BaseAddress,新FormUrlEncodedContent(dict));
if(res.StatusCode==HttpStatusCode.OK)
{
var authentication=JsonConvert.DeserializeObject(res.Content.ReadAsStringAsync().Result);
_context.HttpContext.Session.SetString(“token”,authentication.Access_token);
返回authentication.Access\u令牌;
}
其他的
{
抛出新异常();
}
}
这个令牌在60分钟后过期,所以我也必须处理这个问题,我只使用这个令牌访问一个特定的端点,我不使用它进行身份验证或授权。我需要做哪些更改才能将其存储在cookie或localstorage中

我需要做哪些更改才能将其存储在cookie或localstorage中

正如我们在注释中所讨论的,要在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

根据您的代码和描述,您似乎希望检查客户端是否已获取令牌,以及令牌是否过期,对于这种情况,如您所述,您可以将其存储在cookie或本地存储等中。要将其存储在cookie中,您可以尝试这样的代码
HttpContext.Response.Cookies.Append(“令牌”),authentication.Access_Token,new Microsoft.AspNetCore.Http.CookieOptions{Expires=DateTime.Now.AddMinutes(Expires_in)})
@FeiHan谢谢,如果加上这个作为答案,我会接受的