Netflix Zuul 未通过 .Net Core 3.1 Web 应用程序的关联 Cookie - Identity Server 4 和 Nginx

Netflix Zuul Not Passing Through Correlation Cookie for .Net Core 3.1 Web App - Identity Server 4 and Nginx

我有一个基本的 .Net Core 3.1 mvc Web 应用程序,它使用混合流和 Identity Server 4(基于他们的快速入门)。后者位于 nginx 之后,网络应用位于 nginxzuul 之后。当我单击 Web 应用程序中的登录按钮时,我被重定向到 Identity Server 的登录页面。登录后,oidc 重定向失败,在我的 Web 应用程序日志中,我有一个相关 ID cookie 错误,表明它已丢失。

然后我所做的就是将 Web 应用程序直接放在 nginx 后面,就像 Identity Server,并且一切都按预期使用 oidc 登录和注销重定向。

这是我在 application.properties

中的 zuul 配置
zuul.sensitive-headers=Cookie,Set-Cookie
zuul.ignored-services= '*'
zuul.add-host-header=true

server.port=9002
spring.application.name=zuul
eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:9001/eureka}
zuul.strip-prefix=false
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true

在此配置中我可能还需要其他东西来解决我的问题吗?

我的 nginx 配置为转发 Web 应用程序所有必需的 headers,但是当从 zuul.[=23 代理时,下游可能会丢失某些东西=]

location / {
   proxy_pass http://zuul:9002/;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Scheme $scheme;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-Host $host;
}

这一切都是使用 Docker 个容器完成的。

最后这是一个非常简单的修复,因为我最初误解了 zuul 文档。我在上面所做的确实是将 cookie 列入黑名单:

zuul.sensitive-headers=Cookie,Set-Cookie

看来 zuul 黑名单 Cookie,Set-Cookie,Authorisation 开箱即用。一旦我将 属性 设置为空字符串或随机字符串名称,一切都会按预期进行。