.NET 5 Web API 中的 JWT 授权和刷新令牌

Posted

技术标签:

【中文标题】.NET 5 Web API 中的 JWT 授权和刷新令牌【英文标题】:JWT Authorization and Refresh token in .NET 5 Web API 【发布时间】:2021-11-06 00:07:48 【问题描述】:

我在 .NET 5 Web API 项目和 Angular 11 的前端创建了 JWT 授权/身份验证服务,我面临的一个问题是刷新令牌功能。当我发送刷新令牌请求时。 I am using Validate Token function which is in JwtSecurityTokenHandler class provided by Microsoft and it throws exception if token is expired already,所以我的问题是,我应该在它过期之前发送刷新令牌请求吗?如果不是,我如何禁用 Validate Token 函数中的 Token 过期检查,或者我应该编写我自己的该函数版本?

【问题讨论】:

请不要将代码包含为图像。相反,粘贴为文本,并使用 Markdown 格式化。这使得社区在需要时更容易阅读和复制代码,并且还改进了搜索结果和可访问性。 【参考方案1】:

您可以轻松禁用令牌过期检查。只需创建新的TokenValidationParameters 并将ValidateLifetime 设置为false。像这样的

public ClaimsPrincipal GetPrincipalFromExpiredToken(string jwtToken)

    var tokenValidationParameters = new TokenValidationParameters
    
        ValidateAudience = true,
        ValidAudience = configuration["security:audience"],
        ValidIssuer = configuration["security:issuer"],
        ValidateIssuer = true,
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = GetIssuerSigningKey(),
        ValidateLifetime = false //here we are saying that we don't care about the token's expiration date
    ;

    var tokenHandler = new JwtSecurityTokenHandler();
    var principal = tokenHandler.ValidateToken(jwtToken, tokenValidationParameters, out SecurityToken securityToken);
    var jwtSecurityToken = securityToken as JwtSecurityToken;
    if (jwtSecurityToken == null || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase))
        throw new SecurityTokenException("Invalid token");

    return principal;

【讨论】:

以上是关于.NET 5 Web API 中的 JWT 授权和刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何实现身份验证和授权 WEB API 2 .NET 应用程序?尝试 JWT 库

.net Core 3 Web API JWT 未经授权

JWT不记名令牌授权不起作用asp net core web api

.NET Core 2 Web API JWT 令牌无法识别

asp.net core 2.0 web api基于JWT自定义策略授权

Web API 中的多个 JWT 授权令牌