小编Ric*_*ish的帖子

IdentityServer4 ValidIssuers

有什么方法可以告诉 IdentityServer4 的身份验证系统允许令牌的多个发行者吗?

我有一个应用程序使用 Identity Server 来发布不记名令牌,只要前端和后端使用相同的 URL 从身份验证中获取令牌就可以正常工作。

但是,我现在需要通过多个 CNAME 访问同一个站点,这意味着客户端将从两个不同的 URL 请求令牌。

发送到日志的错误是:

信息:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7]

Bearer 未经过身份验证。失败消息: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>();
Run Code Online (Sandbox Code Playgroud)

这是来自身份验证服务器方面的事情。

在客户端 API 上, UseIdentityServerAuthentication 调用如下所示:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions()
{
    Authority = AppSettingsConfigurationRoot["Authentication:AuthorityEndpoint"],
    RequireHttpsMetadata = false,
    ApiName = "rqapi",
    AutomaticAuthenticate = true,
    ClaimsIssuer = "http://localhost:5001"
});
Run Code Online (Sandbox Code Playgroud)

{{AppSettingsConfigurationROot["Authentication:AuthorityEndpoint"] 中的地址通常设置在服务器的公共 DNS 名称处,以便从 C# API 的角度来看,AngularJS 看到的令牌颁发者与 IdentityServer 的 URL 匹配。

c# asp.net-core identityserver4

6
推荐指数
1
解决办法
3183
查看次数

根据 JSON 属性从 Redis 排序集中删除

我有大量的项目存储在 Redis 排序集中(数量级为 100,000),并且更新得相当频繁。这些项目是编码为 JSON 字符串的对象,并且集合中的排序排名是从对象的日期/时间属性派生的(在插入时,通过我的代码)。

集合中的每个项目都有一个 Id 属性(它是编码为字符串的 Guid),它在系统中唯一标识该项目。

当这些项目更新时,我需要更新排序集中的项目,或者删除并重新插入该项目。我遇到的问题是如何找到该项目来执行操作。

我当前正在做的是将排序集的全部内容加载到内存中,在我的代码中对该集合进行操作,然后将完整的集合写回 Redis。虽然这有效,但它不是特别有效,并且如果列表开始变得非常大,则无法很好地扩展。

有人对如何以更有效的方式做到这一点有任何建议吗?我拥有的项目的唯一唯一标识符是项目中编码的 Id 属性。

非常感谢,

理查德.

json sortedset redis

1
推荐指数
1
解决办法
2522
查看次数

标签 统计

asp.net-core ×1

c# ×1

identityserver4 ×1

json ×1

redis ×1

sortedset ×1