当使用 IdentityServer4 时,如何修改 token 验证参数以使 token 颁发者不被验证或可以提供多个有效颁发者?
我尝试了以下方法,但这似乎不起作用:
public void ConfigureServices(IServiceCollection services)
{
// ... omitted
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = scopeName;
});
services.PostConfigure<JwtBearerOptions>("Bearer", options =>
{
// Option 1: turn off issuer validation at all
options.TokenValidationParameters.ValidateIssuer = false;
// Option 2 (preferable): Provide multiple valid issuers
options.TokenValidationParameters.ValidIssuers = new[]
{
"http://localhost:5000",
"http://127.0.0.1:5000",
};
});
// ... omitted
}
我需要这个的原因:受身份服务器保护的 API 可以在内部和外部访问。外部各方使用与内部各方不同的 URL 从身份服务器获取 token ,因此 protected API 应将内部和外部 URL 都视为有效。
最佳答案
好的,查看 GitHub 存储库后 IdentityServer4.AccessTokenValidation我找到了一种方法来实现它。我的测试证实它有效。
public void ConfigureServices(IServiceCollection services)
{
// ... omitted
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(
IdentityServerAuthenticationDefaults.AuthenticationScheme,
jwtOptions =>
{
jwtOptions.Authority = "http://localhost:5000";
jwtOptions.RequireHttpsMetadata = false;
// This previously was: options.ApiName = scopeName;
jwtOptions.Audience = scopeName;
// Option 1: if you want to turn off issuer validation
//jwtOptions.TokenValidationParameters.ValidateIssuer = false;
// Option 2: if you want to support multiple issuers
jwtOptions.TokenValidationParameters.ValidIssuers = new[]
{
"http://localhost:5000",
"http://127.0.0.1:5000",
};
},
null
);
// ... omitted
}
关于c# - 关闭颁发者验证或修改 IdentityServer4 中的有效颁发者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53515992/