如下代码,为什么我设置了过期时间为1秒,为啥几秒后我还是能取到数据
public static string CreateToken(IList<Claim> claims)
{
var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(SecurityKey));
var expires = DateTime.Now.AddSeconds(1);
var token = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
notBefore: DateTime.Now,
expires: expires,
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature)); ;
//生成Token
string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return jwtToken;
}
public static void RefreshToken(string token)
{
JwtSecurityToken jwtSecurityToken= new JwtSecurityTokenHandler().ReadJwtToken(token);
IEnumerable<Claim> claims = jwtSecurityToken.Claims;
}
就是能取到的,这个设计就是jwt解密后 拿到的时间由自己服务端来做过期判断,要是过期了就不能jwt解密的话,为什么不使用cookie或者session
我已经知道原因了,.net已经封装了对jwt的过期判断的,我不用cookie的原因是觉得前后端分离的话cookie不好弄
@灬丶: 原来如此 我也学习到了 谢谢
@whyong:配置jwt时注册一个事件,过期了就会进入到这个方法里面
jwtBearerOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if(context.Exception.GetType()==typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("isExpires", "true");
}
return Task.CompletedTask;
}
};