.Net Core 2.1 过期的 JWT 令牌响应 [发布与获取]

Posted

技术标签:

【中文标题】.Net Core 2.1 过期的 JWT 令牌响应 [发布与获取]【英文标题】:.Net Core 2.1 expired JWT token response [Post vs Get] 【发布时间】:2019-04-17 05:47:16 【问题描述】:

我为一个项目实现了不记名令牌身份验证,它工作正常...直到我注意到当令牌过期时,“获取”API 返回“401 未授权”,而“发布”API 返回“404”找不到”。

帖子回复的原因是什么以及如何解决?

Startup.cs 中的令牌配置

// add JWT authentication
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    
        options.TokenValidationParameters = new TokenValidationParameters
        
            ClockSkew = TimeSpan.FromMinutes(5),
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidIssuer = Configuration["JWT:issuer"],
            ValidAudience = Configuration["JWT:audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes((string)Configuration["JWT:key"])),
             RequireSignedTokens = true,
             RequireExpirationTime = true
        ;
    );

测试 API

[HttpGet]
[Route("api/test1")]
public IActionResult test1()

    return Ok("1");

[HttpPost]
[Route("api/test2")]
public IActionResult test2()

    return Ok("2");

邮递员截图

【问题讨论】:

【参考方案1】:

我找到了问题。

看起来是使用自定义错误页面配置导致了问题。

app.UseStatusCodePagesWithReExecute("/Error/0");

我将其恢复为原始配置:

app.UseStatusCodePages();

并且 post API 开始返回 401。

【讨论】:

以上是关于.Net Core 2.1 过期的 JWT 令牌响应 [发布与获取]的主要内容,如果未能解决你的问题,请参考以下文章

如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?

直接从令牌获取 JWT 声明,ASP Net Core 2.1

jwt token 过期时间(asp.net core)

ASP.NET Core 和 JWT 令牌生命周期

ASP.NET Core 2.1 API JWT 令牌 Session.id 在每次请求时都会更改

具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0