nginx 后面的 identityserver4 在 AKS(azure kubernetes)中使用 https 和 letsencrypt 出于某种原因阻止 mvcclient set-cookie

identityserver4 behind nginx with https & letsencrypt in AKS (azure kubernetes) preventing mvcclient to set-cookie for some reason

到目前为止我的一周: 在过去的几天里,我致力于将我们的 identityserver4 .net 核心应用程序部署到 Azure Kubernetes 集群 (AKS)。出现一些问题后,一切似乎都正常。我们没有使用 built-in http-routing 功能,因为出于某种原因我们不想使用子域进行路由;启用 http-routing 后,我们似乎无法让 letsencrypt 工作。我们正在使用 https:// 访问使用 nginx 的 AKS 中托管的服务。

总之.. 当我将我们的一个 mvc 客户端应用程序部署到 AKS 时,问题就出现了。客户端的主页按预期工作。当客户端将我重定向到我们的 idsrv4 服务的登录页面,并且我使用我的凭据登录时:重定向循环开始。我知道这意味着 authcookies 设置不正确。

问题 我发现身份验证往返在 Google Chrome 和 Firefox 中有效,这些浏览器中没有重定向循环。 Edge、IE 和 Safari 不工作并在重定向到 signin-oidc 时导致 redirect-loops。

目前的发现:

  1. 我使用本地 docker 测试了 mvcclient 应用程序以进行 windows 安装。使用 HTTP 连接 - 而不是 https -,往返适用于所有浏览器
  2. 当我使用带有 HTTPS 解密的 Fiddler 来诊断使用远程 AKS 中托管的服务的往返时:往返在所有浏览器中都有效
  3. 当我断开 Fiddler 并测试远程 AKS 中托管的服务时,往返在 Edge、IE 和 Safari 中不起作用。

有谁知道如何配置 Nginx 以支持所有浏览器设置 cookie 并转发正确的 headers?在这种情况下对 identityserver4 有什么要求?我的客户端应用程序或 identityserver4 是否需要任何其他配置 rin nginx 或 cookieauthentication(除了在 startup.cs 中的 identityserveroptions 中设置 publicorigin)?

在我全新安装了一个新的 AKS 集群并再次尝试让 Let's Encrypt 使用标准的 addon-http-routing 工作之后,我开始工作了,我试了又试,最后想:为什么我的重定向到 /signin-oidc 在 Edge 和 IE 中注册为 HTTP/2。事实证明这是我上周遇到的问题组合的主要部分....无论如何:我做了一些研究并想出了如何将配置的某些部分更新到内置入口控制器(addon-http -路由)。对于在使用 AKS(Azure Kubernetes 服务)时遇到 signin-oidc 循环的任何人。您可以覆盖 AKS 中提供的标准 http 路由插件的配置并手动禁用 http/2(默认启用!)。

因为网上很少有关于在 Azure 上结合 Let's Encrypt 和 addon-http-routing 配置 AKS 集群的信息,这让我有点沮丧,因为我找不到任何信息在 Azure 的 AKS 集群中部署 IdentityServer4。我编造了一些 .yaml 文件(所有文件我都用来搞定一切 运行),用评论扩展它们并将它们发布给任何想要在 Azure Kubernetes 服务中安全托管 IdentityServer4 的人。 这是我的第一个 public 贡献,虽然很小。如果有人在使用我的基本 Readme.txt 实现我的 .yaml 文件时遇到问题:请告诉我,我会看看我能做些什么。

https://github.com/leonvandebroek/Identityserver4-deployments/tree/master/Azure%20Kubernetes%20Service