当前位置: 首页 > 知识库问答 >
问题:

如何让SpringSecurity/Grails与终止SSL的负载均衡器很好地配合

何和惬
2023-03-14

我们在Tomcat上部署了一个Grails应用程序,该应用程序部署在终止SSL的负载均衡器后面(负载均衡器然后与端口8080上的tomcat实例通信)。我们已将SpringSecurity配置为需要所有资源上的安全通道,注意来自负载均衡器的标头,强制https并从负载均衡器映射端口:

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
grails.plugin.springsecurity.secureChannel.definition = [
        '/**': 'REQUIRES_SECURE_CHANNEL'
]

大部分工作正常-Grails中的重定向按预期使用https协议,以及大多数ajax请求。

但是,有些ajax请求无法正常工作。它们都与与j\u spring\u security*endpoint(如j\u spring\u security\u check)交互的结果有关。例如,如果用户尝试通过ajax登录,我们会在浏览器中看到此错误(这是成功登录启动的重定向):

 Mixed Content: The page at 'https://www.servernamehere.com/' was loaded over HTTPS, but 
 requested an insecure XMLHttpRequest endpoint 'http://www.servernamehere.com/login/ajaxSuccess'.
 This request has been blocked; the content must be served over HTTPS.

身份验证不成功时会出现同样的问题:

Mixed Content: The page at 'https://www.servernamehere.com/' was loaded over HTTPS, but requested 
an insecure XMLHttpRequest endpoint 'http://www.servernamehere.com/login/authfail?ajax=true'. 
This request has been blocked; the content must be served over https.

我们如何配置Spring Security性来理解所有来自身份验证事件的重定向都需要https?

共有2个答案

闾丘博
2023-03-14

我在Grails应用程序secureChanel标题中设置了类似的设置,如下所示:

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'

GrailsSpring Security插件的两个版本(2.x、3.x)都有一个bughttps://github.com/grails-plugins/grails-spring-security-core/issues/395然而,它已经被修复。。。。

白博赡
2023-03-14

我们能够通过创建自定义重定向策略(实现org.springframework.security.web.重定向策略)并将默认重定向策略bean替换为自定义重定向策略bean来解决此问题。自定义重定向策略检查负载均衡器传入的标头,并确保响应被重定向到适当的协议

 类似资料:
  • 我有一个java应用程序在两个ec2实例中运行,客户可以使用AWS应用程序负载均衡器访问它们。现在ALB可以作为SSL终止点工作。所有请求都通过端口443上的ALB。工作正常。问题是java应用程序有时需要重定向到不同的路径。由于java应用程序不知道它在SSL ALB后面运行,因此重定向路径包括超文本传输协议://而不是https:// 有什么方法可以在我的应用程序之外将协议修改为https?

  • 我们有一个在ec2实例上运行的web应用程序。我们添加了AWS ELB,以将所有请求路由到负载平衡器的应用程序。SSL证书已应用于ELB。 我担心ELB和ec2实例之间的HTTP通信是否安全?或者我应该在ELB和ec2实例之间使用HTTPS通信吗? AWS是否保证ELB和ec2实例之间HTTP通信的安全性?

  • 我在将https添加到我的EC2实例时遇到了一个问题,也许你们可以找到让它工作的答案。 我有一个负载平衡器,它正在将连接转发到我的EC2实例,我已将SSL证书添加到负载平衡器,一切正常,我已将侦听器添加到端口443,该端口将转发到我的实例的端口443,我已将Apache配置为在端口443和80上侦听,现在这里是我的负载平衡器的屏幕截图: SSL证书有效,在端口80(HTTP)上一切正常,但如果我尝

  • 我对Nginx完全陌生。 我想使用免费版本(不是nginx plus)负载平衡(反向代理)之间的3个服务器和连接必须是SSL/443。 我是将SSL证书放在NGINX负载均衡器服务器上,还是将3个SSL证书分别放在3个web服务器上?我听到的评价褒贬不一。我在寻找最好的表现。 其他信息:我使用通配符SSL证书和web其他web服务器是IIS和IP_Hash,以便在相同的web服务器上保持会话。

  • 本文向大家介绍Nginx如何配置负载均衡,包括了Nginx如何配置负载均衡的使用技巧和注意事项,需要的朋友参考一下 Nginx配置负载均衡 使用nginx来配置负载均衡也是比较简单的 首先在http块中配置虚拟域名所对应的地址 然后在server块中配置监听 这样在使用9000端口访问服务器的时候就会进行8080和8082的负载调用 Nginx 负载均衡策略 轮询(默认) 按照时间顺序逐一的分配到

  • 负载均衡器的作用是将流量转发到主机。在这方面,ingress与负载均衡器有何不同?另外,与Amazon ELB和ALB相比,kubernetes内部的负载均衡器是什么概念?