ASP.NET Core和JWT令牌生存期

时间:2018-07-15 06:02:17

标签: c# authentication asp.net-core jwt token

我利用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, ...)-但这没有太大作用。

1 个答案:

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