【发布时间】:2019-12-22 17:28:47
【问题描述】:
我已将我的 Web API 配置为使用 JWT 和一次性刷新令牌。
但是,我想修改标准 JWT 中间件,以使用响应标头而不是标准 HTTP 401 响应来响应具有 HTTP 200 过期令牌的客户。
我已将此代码添加到 services.AddAuthentication() 启动配置中。
services.AddAuthentication()
.AddJwtBearer("Bearer", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
ValidateAudience = false,
ValidateIssuer = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero //the default for this setting is 5 minutes
};
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "True");
context.Response.StatusCode = 200;
}
return Task.CompletedTask;
}
};
});
但是返回给客户端的响应仍然是 HTTP 401。所以我错过了什么吗?
【问题讨论】:
-
在这里打断点:context.Response.Headers.Add("Token-Expired", "True");并检查是否有另一个标头已经在响应中报告了失败。如果是这样,请在添加之前将其删除
标签: c# asp.net-core jwt