Почему моя аутентификация на носителе JWT распознает токены как устаревшие через 5 минут после того, как токен говорит?

Я использую AspNet.Security.OpenIdConnect.Server для выдачи токенов JWT, и для параметра AuthorizationCodeLifetime установлено значение 30 секунд для тестирования. Вот фрагмент кода, который я использую, чтобы установить параметры

        options.TokenEndpointPath = "/api/token";
        options.AllowInsecureHttp = true;
        options.AccessTokenHandler = new JwtSecurityTokenHandler();
        options.SigningCredentials.Add(new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256));
        options.AccessTokenLifetime = TimeSpan.FromSeconds(30);
        options.AuthorizationCodeLifetime = TimeSpan.FromSeconds(30);

Возвращенный токен содержит:

  "expires_in": 30,

и десериализованный токен содержит следующие утверждения:

 "nbf": 1476915220,
 "exp": 1476915250,
 "iat": 1476915220,

Как вы можете видеть, exp (время истечения) составляет 30 секунд после iat (время выдачи). Однако токен не активирует 401 Unauthorized до истечения 5 минут после его истечения. Если мы подключим номер опыта вhttp://www.epochconverter.com/ тогда мы увидим, что это будет в среду, 19 октября 2016 г., 22:14:10 по Гринвичу, что в 5:14:10 вечера по местному времени.

Вот некоторые зарегистрированные данные из библиотеки Core:

Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: IDX10223: Lifetime validation failed. The token is expired.
ValidTo: '10/19/2016 22:14:10'
Current time: '10/19/2016 22:19:10'.
   at Microsoft.IdentityModel.Tokens.Validators.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, SecurityToken securityToken, TokenValidationParameters validationParameters)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, JwtSecurityToken securityToken, TokenValidationParameters validationParameters)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext()
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7]
      Bearer was not authenticated. Failure message: IDX10223: Lifetime validation failed. The token is expired.
ValidTo: '10/19/2016 22:14:10'
Current time: '10/19/2016 22:19:10'.

Конечно, этот вывод не доказывает, что сервер принимал токен между 22:14:10 и 22:19:10. Это то, что было бы сделано, если бы я ждал 5 минут после истечения срока его действия, а затем попытался проверить токен, но вам придется поверить мне на слово. Я тестировал в Почтальоне и нажимал «Отправить» каждую секунду, пока он не вернул 401.

Ну что, как поживаешь? Есть ли встроенный 5-минутный буфер, о котором я не знаю? Интересно, что значение по умолчанию для AccessTokenLifetime составляет 5 минут, но токен определенно отражает то, что я изменил его на 30 секунд. В чем дело?

Соответствующие библиотеки я использую:

<package id="AspNet.Security.OpenIdConnect.Extensions" version="1.0.0-beta6-final" targetFramework="net452" />
<package id="AspNet.Security.OpenIdConnect.Server" version="1.0.0-beta6-final" targetFramework="net452" />
<package id="Microsoft.AspNetCore.Authentication.JwtBearer" version="1.0.0" targetFramework="net452" />

Ответы на вопрос(1)

Ваш ответ на вопрос