Ale*_*nko 3 c# asp.net-core asp.net-core-webapi angular
由于某种原因,我的RESTful应用允许在一定时间内允许来自Angular客户端的令牌过期请求。生成令牌:
private async Task<string> GenerateJwtToken(ApplicationUser user)
{
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id)
};
claims.AddRange(await _userManager.GetClaimsAsync(user));
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetSection("SigningKey").Value));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var expires =
DateTime.Now.AddSeconds(10);
//DateTime.Now.AddDays(Convert.ToDouble(_configuration["ExpireDays"]));
var token = new JwtSecurityToken(
issuer: _configuration["Issuer"],
audience: _configuration["Audience"],
claims: claims,
expires: expires,
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
Run Code Online (Sandbox Code Playgroud)
在客户端请求之前,我记录了到期时间,现在,如果现在超过了到期时间。两个成功请求的日志,但是最后一个应该失败
t:2018年9月18日星期二08:53:43 GMT + 0300(莫斯科标准时间)凭据服务.ts:101
现在:2018年9月18日星期二08:53:41 GMT + 0300(莫斯科标准时间)凭据服务:ts:102
假
真意味着过期
credits-service.ts:100 t:2018年9月18日星期二08:53:43 GMT + 0300(莫斯科标准时间)
credits-service.ts:101现在:2018年9月18日星期二08:58:01 GMT + 0300(莫斯科标准时间)
凭证-service.ts:102
真正
在5-6分钟后我才因为某种原因而不是10秒而被拒绝。
Mat*_*jeS 13
在Startup.cs中定义TokenValidationParameters的位置,将ClockSkew属性的TimeSpan值设置为零:
ClockSkew = TimeSpan.Zero,例如:
new TokenValidationParameters
{
IssuerSigningKey = signingKey,
ValidIssuer = issuer,
ValidAudience = audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
Run Code Online (Sandbox Code Playgroud)
原因是ClockSkew的默认值为5分钟
| 归档时间: |
|
| 查看次数: |
1391 次 |
| 最近记录: |