向 ASP.NET Core 的 JWT 令牌添加自定义验证?
Posted
技术标签:
【中文标题】向 ASP.NET Core 的 JWT 令牌添加自定义验证?【英文标题】:Add custom validation to JWT token for ASP.NET Core? 【发布时间】:2017-01-03 10:39:05 【问题描述】:以前,我可以使用JwtBearerAuthenticationOptions
来添加我的自定义令牌处理程序和我的自定义验证。现在有了核心UseJwtBearerAuthentication
,我需要使用JwtBearerOptions
,它似乎没有覆盖JwtSecurityTokenHandler
的选项。我基本上想覆盖JwtSecurityTokenHandler
中的以下方法:
protected virtual JwtSecurityToken ValidateSignature(string token, TokenValidationParameters validationParameters)
以前:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
TokenHandler = new MyTokenHandler()
// other properties here
);
目前使用 ASP.NET Core:
app.UseJwtBearerAuthentication(new JwtBearerOptions
// other properties here
);
【问题讨论】:
【参考方案1】:JwtBearerOptions
有一个名为TokenValidationParameters
的参数,所以可以使用这个参数:
var tokenValidationParameters = new TokenValidationParameters
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
//...
;
app.UseJwtBearerAuthentication(new JwtBearerOptions
//...
TokenValidationParameters = tokenValidationParameters
);
【讨论】:
是的,我查看了 TokenValidationParameters 但无法弄清楚如何进行自己的令牌验证。特别是我想验证签名,但我不知道如何使用 TokenValidationParameters 来做到这一点。 您遇到错误了吗?如果没有,您的令牌验证逻辑是什么,您可以发布吗? 我没有收到错误消息。 JwtBearerOptions 中没有 TokenHandler 属性,就像 JwtBearerAuthenticationOptions 中那样。【参考方案2】:如果您想实际创建自己的JwtSecurityTokenHandler
并覆盖ValidateSignature
方法,可以使用SecurityTokenValidators
属性:
var options new JwtBearerOptions();
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new MyTokenHandler());
app.UseJwtBearerAuthentication(options);
从技术上讲,对 Clear()
的调用不是必需的 - 只要令牌处理程序之一可以解析令牌,验证调用就会成功。但是,如果在您的情况下它永远不会成功,那么删除 JwtSecurityTokenHandler
似乎是有道理的。
【讨论】:
这一行options.SecurityTokenValidators.Clear();
节省了我的时间。非常感谢
如何从客户令牌处理程序返回错误 - ValidateToken 方法?以上是关于向 ASP.NET Core 的 JWT 令牌添加自定义验证?的主要内容,如果未能解决你的问题,请参考以下文章