JWT авторизация с куки - как бороться с просроченным токеном? - PullRequest
0 голосов
/ 01 мая 2019

Используя DotNet Core 2.2, я использую аутентификацию JWT в своем приложении, сохраняя токен в куки.Все хорошо, кроме того, когда токен истекает.

У меня есть следующие опции для моей аутентификации в Startup.cs:

services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                })
                .AddCookie(options =>
                {
                    options.SlidingExpiration = true;
                    options.Cookie.Name = "access_token";
                    options.TicketDataFormat = new SimpleTokenProvider.CustomJwtDataFormat(
                        SecurityAlgorithms.HmacSha256,
                        tokenValidationParameters);
                    options.Cookie.SameSite = SameSiteMode.None;
                });

А вот мой SimpleTokenProvider.cs файл:

public AuthenticationTicket Unprotect(string protectedText, string purpose)
            {
                var handler = new JwtSecurityTokenHandler();
                ClaimsPrincipal principal = null;
                SecurityToken validToken = null;

                try
                {
                    principal = handler.ValidateToken(protectedText, this.validationParameters, out validToken);

                    var validJwt = validToken as JwtSecurityToken;

                    if (validJwt == null)
                    {
                        throw new ArgumentException("Invalid JWT");
                    }

                    if (!validJwt.Header.Alg.Equals(algorithm, StringComparison.Ordinal))
                    {
                        throw new ArgumentException($"Algorithm must be '{algorithm}'");
                    }
                }
                catch (SecurityTokenValidationException e)
                {
                    return null;
                }
                catch (ArgumentException e)
                {
                    return null;
                }

                return new AuthenticationTicket(principal, new AuthenticationProperties(), "Cookie");
            }

Моя проблема заключается встрока handler.ValidateToken(protectedText, this.validationParameters, out validToken) продолжает выдавать исключение тайм-аута:

Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: 'IDX10223: проверка продолжительности жизни не выполнена.Срок действия токена истек.ValidTo: '[PII скрыт]', Текущее время: '[PII скрыт]'. '

В этом случае я хотел бы автоматически сгенерировать новый токен или удалитьтекущий файл cookie для аутентификации.

Как мне это сделать / как лучше всего поступить?

...