web-dev-qa-db-fra.com

Durée de vie du jeton ASP.NET Core et JWT

J'utilise ASP.NET Core 2.1.1

Il est intéressant de noter que le délai d'expiration n'est pris en compte que lorsque l'on fournit bothClockSkew - dans Startup.cs etJwtSecurityTokenHandler.TokenLifetimeInMinutes - dans un contrôleur .

Par exemple:

services
  .AddJwtBearer(x =>
  {
      ...
      x.TokenValidationParameters = new TokenValidationParameters()
      {
         ClockSkew = TimeSpan.FromMinutes(90),
         ...

plus

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

Si je supprime la partie tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes; - le délai d'expiration par défaut est utilisé.

Il me semble que tokenHandler.TokenLifetimeInMinutes Est toujours redondant et je comprends mal le concept de la façon de régler correctement le délai d'expiration.

J'ai également essayé d'ajouter la revendication d'expiration - new Claim(ClaimTypes.Expiration, ...) - mais cela n'a pas eu beaucoup d'effet.

6
Alex Herman

La propriété ClockSkew ne concerne pas l'expiration elle-même, elle compense décalage d'horloge .

Pour configurer l'expiration du jeton, vous devez le spécifier lors de la création du jeton:

new JwtSecurityToken(
                ...
                expires: DateTime.UtcNow.AddMinutes(90),
                ....);

et le code suivant vous donnera une chaîne avec un jeton:

var token = new JwtSecurityToken() { /* setup your token setting here*/ }
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
17
Alex Riabov