我正在使用受Spring Security SSO登录保护的Spring微服务(使用Cloudfoundry UAA).
部署在云上的微服务可通过HTTPS URL访问.由于HTTPS URL是ELB(负载均衡器/ Web服务器),因此对ELB的微服务的实际请求来自HTTP.因此Spring将用户重定向到登录页面时会在302 Location标题中生成HTTP URL而不是HTTPS URL.
以下是流程
Browser
->(https://mymicroservice.com) Unauthenticated request (Load balancer)
->(http://internal_lan_ip:someport) Microservice
-> 302 Location http://mymicroservice.com/login
-> Browser http://mymicroservice.com/login (failed)
In short it goes from HTTPS -> HTTP -> 302 HTTP (failed as ELB doesn't serve on HTTP)
以下是我的尝试
的x转发-原
由于负载均衡器也没有正确地将x-forwarded-proto填充到HTTPS,而是它给了我HTTP,我不能使用Spring的支持.
需要渠道HTTPS
它也不起作用,因为它导致Spring无限重定向,因为Spring从未收到来自ELB的HTTPS请求,尽管正确生成了HTTPS重定向URL.
拦截器/过滤器
使用ServletFilter检查响应头位置,如果存在,则用https://替换http://.
坦率地说,最后一个选项是我的最终选项,因为我不控制ELB配置.
现在的问题是

在使用Spring Security SSO的微服务中遇到问题,当从HTTPS请求转向内部HTTP服务时,Spring生成的302重定向URL为HTTP,导致失败。尝试了包括设置'x-forwarded-proto',启用'ChannelProcessingFilter',以及自定义ServletFilter来修改响应头的解决方案,但未成功。问题在于无法在Spring Security重定向到'/login'后拦截响应以更新Location头。寻求使用过滤器或拦截器的正确方法来解决这个问题。
最低0.47元/天 解锁文章
544

被折叠的 条评论
为什么被折叠?



