首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IdentityServer4 ValidIssuers

IdentityServer4 ValidIssuers
EN

Stack Overflow用户
提问于 2018-04-20 22:40:47
回答 1查看 4.4K关注 0票数 7

是否有任何方法可以告诉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?

更新

服务器端的身份服务器配置如下所示:

代码语言:javascript
复制
services.AddIdentityServer(options => { 
                             options.IssuerUri = "http://authserver"; })
     .AddAspNetIdentity<ApplicationUser>();

这是来自服务器端的东西。

在client上,UseIdentityServerAuthentication调用如下所示:

代码语言:javascript
复制
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匹配。

EN

回答 1

Stack Overflow用户

发布于 2020-07-27 23:17:23

作为在评论中写的原版海报,(现在,2020年) IdentityServer4.AccessTokenValidation 4.AccessTokenVal环流包没有公开正确的选项。要阅读更多关于最近的弃用查看这篇博文的信息,但是如果您仍然在使用它,下面是我如何解决这个问题的方法。

可拓法是一个包装器(代码是超级可读的!)将两个身份验证方案结合起来:

  1. JwtBearer
  2. OAuth2Introspection

它使用自己的配置类,而且不公开所有JwtBearer选项(可能只是遗漏,可能是因为某些选项对这两种方案都无效)。

如果-like me- -您只需要使用JwtBearer,就可以简单地使用它,并使用ValidIssuers数组。所以:

代码语言:javascript
复制
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令牌都将被接受。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49950579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档