0

使用 DotNet Core 2.2,我在我的应用程序中使用 JWT 身份验证,同时将令牌存储在 cookie 中。除了令牌过期外,一切都很好。

我在 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 is hidden]',当前时间:'[PII is hidden]'。

在这种情况下,我想做的是自动生成一个新令牌,或者删除当前的身份验证 cookie。

我该怎么做/最好的方法是什么?

4

0 回答 0