具有与此类似的配置:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(x =>
{
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(config.JwtSecret)),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
是否有在运行时更改 IssuerSigningKey 的正确方法?
想到的想法:
这两种方式看起来都太老套了。我认为有某种机制可以以正确的方式实现这一目标,但我只是找不到它。
我知道这是一个旧线程,但无论如何发布我的答案,因为我在搜索相同场景时偶然发现了这个线程,我认为它可能对其他人有用。
有一个代表IssuerSigningKeyResolver
,在 TokenValidationParameters 中,您可以在配置其他选项时设置。每次请求身份验证时,您的委托都会被执行。您可以动态返回SecurityKey
.
例如:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
//ValidIssuer = jwtSettings.ValidIssuer,
//ValidAudience = jwtSettings.ValidAudience,
//IssuerSigningKey = issuerSigningKey,
IssuerSigningKeyResolver = (token, secutiryToken, kid, validationParameters) =>
{
SecurityKey issuerSigningKey = null;
// Set issuerSigningKey as per your logic.
// This delegate will be executed for eahc request.
return new List<SecurityKey>() { issuerSigningKey };
}
};
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)