Por que minha autenticação de portador JWT reconhece os tokens expirados 5 minutos depois que o token diz?

Estou usando o AspNet.Security.OpenIdConnect.Server para emitir tokens JWT e ter o AuthorizationCodeLifetime definido como 30 segundos para teste. Aqui está o trecho de código que estou usando para definir as opções

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

O token retornado contém:

  "expires_in": 30,

e o token desserializado contém as seguintes reivindicações:

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

Como você pode ver, o exp (tempo de expiração) é 30 segundos após o iat (tempo de emissão). No entanto, o token não está disparando um 401 Não Autorizado até 5 minutos após a expiração. Se inserirmos o número de exp emhttp://www.epochconverter.com/ veremos que isso é avaliado como quarta-feira, 19 de outubro de 2016 às 22:14:10 GMT, que é 17:14:10 no meu horário local.

Aqui estão algumas saídas registradas da biblioteca 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'.

Obviamente, essa saída não prova que o servidor estava aceitando o token entre 22:14:10 e 22:19:10. Isso é o que teria acontecido se eu tivesse esperado 5 minutos após o vencimento e tentado validar o token, mas você terá que aceitar minha palavra. Eu estava testando no Postman e estava clicando em "Enviar" a cada segundo até retornar um 401.

Então, como vai? Existe algum buffer de 5 minutos que eu não conheço? Curiosamente, o valor padrão para o AccessTokenLifetime é de 5 minutos, mas o token definitivamente reflete que eu mudei para 30 segundos. O que está acontecendo?

Bibliotecas relevantes que estou usando:

<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" />

questionAnswers(1)

yourAnswerToTheQuestion