首页 > 解决方案 > Zuul 路由到安全的微服务结果到 401 响应

问题描述

我创建了一个 Zuul 代理,将请求路由到微服务中的安全端点(基本身份验证)。

我的 Zuul 代理在端口 8888 上运行。

我的安全微服务有一个端点 /api/foo,通过 Spring Security 使用用户名:密码进行身份验证。服务 id 等于安全服务。

现在,每当我访问http://localhost:8888/secure-service/api/foo时,浏览器都会提示我输入我的用户名和密码(证明它确实路由到安全服务)。但是进入后,它只是不断询问我的凭据。我也尝试通过 curl 访问它, curl http://username:password@localhost:8888/secure-service/api/foo我得到 401 响应。

为什么会这样?

然后我尝试在我的安全服务上删除 spring 安全依赖项和配置,一切正常。但我真的很想进行基本身份验证。

感谢您的阅读。

标签: spring-securityspring-cloudnetflix-zuul

解决方案


我终于找到了答案:) Zuul 中有一个名为的配置属性 zuul.sensitive-headers

此属性是一个字符串集合,其中包含不包含在传递给微服务的标头。目前,Spring Cloud Zuul(版本 2.2.1.RELEASE)默认设置这 3 个值。

Cookie,Set-Cookie,授权

看在上帝的份上,他们将授权作为敏感标头之一,这就是为什么每当 Zuul 尝试路由到安全的微服务时,您都会不断收到 401 未经授权的响应。

解决方案只是删除 Zuul 应用程序中配置属性中的授权。

zuul.sensitive-headers=Cookie,Set-Cookie

希望能帮助到你。


推荐阅读