【问题标题】:Spring security redirection URL using HTTP while HTTPS required使用 HTTP 和 HTTPS 的 Spring 安全重定向 URL
【发布时间】:2021-01-21 07:27:20
【问题描述】:
我的项目架构由一个配置了 SSL 的负载平衡器组成。 SSL 配置在负载平衡器处终止,并且请求通过 HTTP 转发到 WebServer 和 AppServer。当用户第一次访问应用程序时,Spring Security 尝试使用 HTTP 协议重定向到登录页面。由于负载均衡器侦听 HTTPS,因此此请求失败。
考虑到 WebServer 将始终通过 HTTP 转发到 AppServer,我应该如何确保 Spring Security 在创建重定向请求时使用 HTTPS 协议?
注意:AppServer 是 Jboss EAP 7.3
【问题讨论】:
标签:
spring-boot
apache
spring-security
jboss
【解决方案1】:
对于当前架构,我无法从 Spring Boot 中弄清楚如何做到这一点。作为一种解决方法,我们在 LoadBalancer 上添加了一个 IRule,它不会拒绝 http 请求,而是将它们重定向到 HTTPS。
【解决方案2】:
通常,简单的 http 到 https 重定向会使用户多跳一次,因为他们将返回 http,然后需要重定向。这可能是无痛的(尤其是您使用的是 HSTS)。通常,从 BIG-IP 的角度来看,这样做的方式是插入 https 的 X-Forwarded-Proto (xfp) 标头(您可以检查源在 iRule 中使用 https 或使用策略插入标头)。
另一部分是让 Spring 查看 xfp 标头而不是服务器 URL 来确定请求是否使用 https。
您是否还尝试在重定向中消除任何主机或协议名称?我们对任何重定向的相对引用都很幸运,但我仍然看到一些应用程序使用 http 发送 302 重定向,然后重定向 iRule 会反弹回 https。