【问题标题】:No endpoint entry found when load balancing IdentityServer4负载平衡 IdentityServer4 时未找到端点条目
【发布时间】:2020-09-29 23:56:04
【问题描述】:

我正在尝试使用 docker 容器设置本地 nginx 负载平衡 IDS(使用混合模型和 HTTPS)。

如果我将 IDS 缩放到 1,我可以成功登录。

当我扩展到 2 个或更多时,使用循环式平衡,我在尝试登录时被重定向到登录页面。

初始登录尝试命中 IDS1,然后登录的第二个请求部分命中 IDS2,返回以下错误:No endpoint entry found for request path: /Account/Login [IdentityServer4.Hosting.EndpointRouter]

我已验证两个 IDS 都已启动并正在运行,如果我点击发现文档,我可以看到 nginx 轮询它,并且每次都得到成功的结果。

编辑:我不再收到错误消息,但是当我尝试登录进入 IDS2 的登录的第二个请求部分时,我仍然表现得好像我不在登录过程中并带我进入登录页面。

【问题讨论】:

  • 有点不相关,但您在两个服务中是否拥有相同的 DataProtection 密钥和签名密钥?
  • @ToreNestenius 所以更新了这个问题,这个错误不再发生(我在启动时的配置中更改了 app.UseIdentityServer() 的顺序。但它背后的真正问题仍在发生(IDS2 认为您根本没有登录并重定向回登录)。
  • @ToreNestenius 至于你关于 DataProtection 密钥的问题,我目前只使用 IdentityServer.AddSignedCredential(certificate) 添加 X509Certificate2,我目前不使用 .AddDataProtection()。
  • 希望我下面的回答是可以接受的。 :-)

标签: asp.net-core nginx https load-balancing identityserver4


【解决方案1】:

您需要配置数据保护 API 并在两个服务中设置相同的密钥,否则 ASP.NET 将不会接受来自其他服务的 cookie。密钥用于保护和加密 cookie。

为了了解我最近编写的这个参考项目的数据保护 API

  • AzureKeyVaultKeyRingRepository 目的是演示和展示如何将 ASP.NET Core 数据保护 API 密钥环存储在 Azure Key Vault 中。 (即将发布博文)

详细了解数据保护 API here

【讨论】:

  • 我不得不调整以使用本地文件系统而不是 Azure,但这个概念非常有效并解决了我的问题!谢谢。
  • 很高兴你修好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多