是否有任何方法可以告诉IdentityServer4 4的身份验证系统允许多个颁发者对令牌进行访问?
我有一个应用程序,它使用Identity Server来发出承载令牌,只要前端和后端使用相同的URL从身份验证中获得令牌就可以了。
但是,我现在需要通过多个CNAME访问同一个站点,这意味着客户端将从两个不同的URL请求令牌。
发送给日志的错误是:
信息: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware7 持票人没有经过认证。失败消息: IDX10205:颁发者验证失败。发行人:'http://domainb.com‘。不匹配: validationParameters.ValidIssuer:'http://domaina.com‘或validationParameters.ValidIssuers:'null’。
ValidIssuers集合的存在似乎表明您可以设置多个位置,从那里API将接受令牌,但我无法在UseIdentityServerAuthentication公开的选项中找到这样的公开。
我知道当局的选择,但这只容许我设立一个有效的权力机构。
是否有任何方法设置多个有效的发行者,或将其设置为使用主机名以外的其他东西作为颁发者id?
更新
服务器端的身份服务器配置如下所示:
services.AddIdentityServer(options => {
options.IssuerUri = "http://authserver"; })
.AddAspNetIdentity<ApplicationUser>();这是来自服务器端的东西。
在client上,UseIdentityServerAuthentication调用如下所示:
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions()
{
Authority = AppSettingsConfigurationRoot["Authentication:AuthorityEndpoint"],
RequireHttpsMetadata = false,
ApiName = "rqapi",
AutomaticAuthenticate = true,
ClaimsIssuer = "http://localhost:5001"
});{{AppSettingsConfigurationROot"Authentication:AuthorityEndpoint“中的地址通常设置在服务器的公共DNS名称上,以便AngularJS看到的令牌颁发者从C# API的角度与IdentityServer的URL匹配。
发布于 2020-07-27 23:17:23
作为在评论中写的原版海报,(现在,2020年) IdentityServer4.AccessTokenValidation 4.AccessTokenVal环流包没有公开正确的选项。要阅读更多关于最近的弃用查看这篇博文的信息,但是如果您仍然在使用它,下面是我如何解决这个问题的方法。
可拓法是一个包装器(代码是超级可读的!)将两个身份验证方案结合起来:
它使用自己的配置类,而且不公开所有JwtBearer选项(可能只是遗漏,可能是因为某些选项对这两种方案都无效)。
如果-like me- -您只需要使用JwtBearer,就可以简单地使用它,并使用ValidIssuers数组。所以:
services.AddAuthentication("Bearer")
.AddJwtBearer(options =>
{
options.Authority = "https://example.org";
options.Audience = "foo-api"; // options.ApiName in the IDS4 variant
options.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuers = new[]
{
"https://example.org", // first issuer
"https://example.com", // some other issuer
},
NameClaimType = "name", // To mimick IDS4's variant
RoleClaimType = "role", // To mimick IDS4's variant
};
});据我所知,这将使用example.org作为权限,并从该域获取openid配置等等。但是,只要ValidIssuers之一是令牌中的iss (发行者声明),提供给该API的任何JWT令牌都将被接受。
https://stackoverflow.com/questions/49950579
复制相似问题