TokenLifetimeInMinutes

TokenLifetimeInMinutes

我利用ASP.NET Core 2.1.1
有趣的是,只有在startup.cs中同时提供ClockSkew-和在控制器中同时提供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, ...)-但效果不大。

最佳答案

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);

07-24 09:34