我利用ASP.NET Core 2.1.1
有趣的是,只有在Startup.cs 和中同时提供两者 ClockSkew
-时才考虑有效期strong> JwtSecurityTokenHandler.TokenLifetimeInMinutes
-在控制器中。
例如:
services
.AddJwtBearer(x =>
{
...
x.TokenValidationParameters = new TokenValidationParameters()
{
ClockSkew = TimeSpan.FromMinutes(90),
...
加
...
public async Task<AuthenticateOutput> Authenticate([FromBody] AuthenticateInput input)
{
var tokenHandler = new JwtSecurityTokenHandler();
tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes;
...
如果我删除tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes;
部分-使用默认的到期时间。
在我看来tokenHandler.TokenLifetimeInMinutes
仍然 是多余的,我只是误解了如何正确设置到期时间的概念。
我还尝试添加过期声明-new Claim(ClaimTypes.Expiration, ...)
-但这没有太大作用。
答案 0 :(得分:9)
ClockSkew
属性本身与到期无关,它可以补偿clock skew。
要设置令牌到期,您必须在创建令牌时对其进行指定:
new JwtSecurityToken(
...
expires: DateTime.UtcNow.AddMinutes(90),
....);
,以下代码将为您提供带令牌的字符串:
var token = new JwtSecurityToken() { /* setup your token setting here*/ }
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);