我正在创建一个Asp.net核心REST服务 . 目前正在通过JWT承载令牌进行身份验证 .
现在,我的代码看起来像:
DateTimeOffset dtNow = DateTime.Now;
Claim[] claims = new Claim[]
{
new Claim(JwtRegisteredClaimNames.Sub, strUsername),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat, dtNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
};
JwtSecurityToken jwtAccess = new JwtSecurityToken(_options.Issuer, _options.Audience, claims, dtNow.DateTime, dtNow.DateTime.Add(_options.AccessTokenExpiration),
_options.SigningCredentials);
var response = new
{
access_token = new JwtSecurityTokenHandler().WriteToken(jwtAccess),
token_type = "Bearer",
expires_in = (int)_options.AccessTokenExpiration.TotalSeconds,
refresh_token = ""
};
问题:
现在,我的访问令牌1小时好,刷新令牌60天 . 这些合理的 Value 观是?
没有看到很多关于如何创建refresh_token的文档......这是创建的,就像访问令牌一样,但只是有不同的超时?
我的理解是我应该将刷新令牌存储在数据库中,如果用户发送刷新令牌请求,我需要验证令牌的签名并确保它在我的数据库中?
当用户请求刷新令牌时,我应该返回相同的refresh_token,无论它是否过期,让用户担心获取一个新的?
用户一次只能有一个刷新令牌,对吗?如果他们再做一次password_grant,我只是覆盖刷新令牌,好像他们正在获得一个全新的?
最后一个问题是,我看到人们正在进行JWT认证,这就是为什么我必须每隔5分钟获得一个新令牌,所以这一切看起来都像洗,除非我遗漏了什么?