以前,我可以使用JwtBearerAuthenticationOptions
通过自定义验证添加自定义令牌处理程序。现在使用Core 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
});
答案 0 :(得分:8)
如果您想要实际创建自己的JwtSecurityTokenHandler
并覆盖ValidateSignature
方法,则可以使用SecurityTokenValidators
属性:
var options new JwtBearerOptions();
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new MyTokenHandler());
app.UseJwtBearerAuthentication(options);
从技术上讲,对Clear()
的调用是不必要的 - 只要其中一个令牌处理程序可以解析令牌,对authenticate的调用就会成功。但是,删除JwtSecurityTokenHandler
似乎有意义,如果它在您的情况下不会成功。
答案 1 :(得分:0)
JwtBearerOptions
有一个名为TokenValidationParameters
的参数,因此您可以使用此参数:
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
//...
};
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
//...
TokenValidationParameters = tokenValidationParameters
});