ASP.NET Core和JWT令牌生存期

Ale*_*man 6 c# authentication token jwt asp.net-core

我利用 ASP.NET Core 2.1.1

有趣的是,过期时间只被考虑到,当一个提供两个 ClockSkew - 在Startup.cs JwtSecurityTokenHandler.TokenLifetimeInMinutes - 在控制器.

例如:

services
  .AddJwtBearer(x =>
  {
      ...
      x.TokenValidationParameters = new TokenValidationParameters()
      {
         ClockSkew = TimeSpan.FromMinutes(90),
         ...
Run Code Online (Sandbox Code Playgroud)

...
public async Task<AuthenticateOutput> Authenticate([FromBody] AuthenticateInput input)
{
   var tokenHandler = new JwtSecurityTokenHandler();
   tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes;
   ...
Run Code Online (Sandbox Code Playgroud)

如果我删除tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes; 部分 - 使用默认的到期时间.

在我看来,这仍然tokenHandler.TokenLifetimeInMinutes是多余的,我只是误解了如何正确设置到期时间的概念.

我也试过添加到期声明 - new Claim(ClaimTypes.Expiration, ...)但这没有太大作用.

Ale*_*bov 17

ClockSkew属性不是关于到期本身,它补偿时钟偏差.

要设置令牌过期,您必须在令牌创建时指定它:

new JwtSecurityToken(
                ...
                expires: DateTime.UtcNow.AddMinutes(90),
                ....);
Run Code Online (Sandbox Code Playgroud)

以下代码将为您提供带令牌的字符串:

var token = new JwtSecurityToken() { /* setup your token setting here*/ }
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
Run Code Online (Sandbox Code Playgroud)

  • 如何避免过期?我已尝试删除过期属性,但它仍然在 1 小时左右过期 (2认同)