Asp.Net Core & JWT-аутентификация: как узнать, что аутентификация не удалась из-за истечения срока действия токена? - PullRequest
0 голосов
/ 14 ноября 2018

Я использую аутентификацию JWT:

.AddJwtBearer(options =>
        {
            // options.SaveToken = false;
            // options.RequireHttpsMetadata = false;

            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(AuthConfig.GetSecretKey(Configuration)),

                ValidateIssuer = false,
                ValidateAudience = false,

                ValidateLifetime = true,
                ClockSkew = TimeSpan.Zero,
            };

            options.Events = new JwtBearerEvents()
            {
                OnChallenge = c =>
                {
                    c.HandleResponse();

                    // TODO: How to know if the token was expired?

                    return AspNetUtils.WriteJsonAsync(c.Response, new Result<string> { Message = "Unauthenticated.", IsError = true }
                                                     , 401);
                },
            };
        })

Аутентификация работает нормально.Для новых требований мне нужно знать, не прошла ли аутентификация из-за истечения срока действия токена JWT.

Обратите внимание, что сбой аутентификации может быть по нескольким причинам .Токен может отсутствовать, подделываться или срок его действия истек.

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018
.AddJwtBearer(options =>
{
    options.Events = new JwtBearerEvents()
    {
        OnAuthenticationFailed = context =>
        {
            if(context.Exception is SecurityTokenExpiredException)
            {
                // if you end up here, you know that the token is expired
            }
        }
    };
})
...