有一个类似这样的配置:
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
};
});
Run Code Online (Sandbox Code Playgroud)
是否有在运行时更改 IssuerSigningKey 的正确方法?
想到的想法:
保留对 TokenValidationParameters 的引用,只需替换 IssuerSigningKey
扩展 SymmetricSecurityKey 并执行与上一点类似的操作
这两种方式似乎都太hacky了。我认为有某种机制可以以正确的方式实现这一点,我只是找不到它。
我知道这是一个旧线程,但还是发布了我的答案,因为我在搜索相同场景时偶然发现了这个线程,我认为它可能对其他人有用。
IssuerSigningKeyResolver在 TokenValidationParameters 中有一个 delegate ,您可以在配置其他选项时设置它。在每次请求身份验证时,您的委托都会被执行。您可以动态返回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 };
}
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |