我有一个使用Spring Security Core的Grails应用程序,运行在负载平衡器后面的AWS机器上。
负载均衡器解密 ssl 连接并转发到实例的端口 8080,添加相应的 X 转发 Proto 标头。
我希望任何对安全页面的直接访问都使用https重定向到登录页面。
例如,请求 https://myapp.com/private/page 应重定向到 https://myapp.com/login/auth
我把它放在我的配置中:
grails.plugin.springsecurity.secureChannel.definition = [
'/login/**': 'REQUIRES_SECURE_CHANNEL'
]
但这会导致HTTP登录页面的重定向循环(HTTP代码302)(http://myapp.com/login/auth)
然后我试着用:
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.auth.forceHttps = true
但这会导致重定向(HTTP代码302)到超文本传输协议登录页面(http://myapp.com/login/auth)
在类似的帖子里没有运气,知道吗?
我在类似的环境中遇到过类似的问题,前端在https上,防火墙后面的grails服务器在http上。当会话超时时,ajax和angular $http用于将消息重定向到http://myclient.com/myWar/login/auth.。该重定向请求用于导致浏览器中的访问被拒绝,因为原始url是https并且混合内容被禁用。我曾经得到SCRIPT7002: XMLHttpRequest:网络错误0x80700013,由于错误80700013无法完成操作。“此错误只发生在生产环境中,而不是在测试环境中。
修复很简单,只需将以下内容添加到配置文件中即可。圣杯服务器URL =“https://mywebsitespublicaddress.com/myWar”
我只是经历了同样的场景。卡在https上,然后是重定向,现在一切都很好。使用以下配置.groovy 设置:
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'
请注意,对于那些不使用springsecurity 2.0的用户,它是“插件”,而不是没有“s”的“插件”。
我的beanstalk负载平衡器设置看起来像这样(我安装了SSL证书,我没有显示它):
在EC2负载平衡器设置中,确保您的侦听器设置正确:
最后,在EC2安全组中,确保EB接受来自ELB的端口80和443上的请求:
请注意,在我的设置中,我从未引用过端口 8080 或 8443,即使这是我在本地主机上用于测试的内容。阅读本文的人可能会考虑尝试使用这些端口来解决问题。我的设置不需要这样做。
我还在AWS上使用https和负载均衡器托管我的带有Spring Security Core 2.0-RC4的Grails应用程序,并且感谢AWS的spock99(上图)和Ravi L,我让它正常工作。
我在config.groovy中执行了以下操作:
// Required because user auth uses absolute redirects
grails.serverURL = "http://example.com"
grails.plugin.springsecurity.secureChannel.definition = [
'/assets/**': 'ANY_CHANNEL',// make js, css, images available to logged out pages
'/**': 'REQUIRES_SECURE_CHANNEL',
]
// overriding values in DefaultSecurityConfig.groovy from the SpringSecurityCore 2.0-RC4
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
注意:Spring安全核心 2.0-RC4 中不需要以下内容 - 它们已在默认安全配置中
secureHeaderName = 'X-Forwarded-Proto'
secureHeaderValue = 'http'
insecureHeaderName = 'X-Forwarded-Proto'
insecureHeaderValue = 'https'
我得到了错误的“不正常”读数,因为点击“/”返回302重定向到/login/auth,所以我向主页控制器(我映射到“/health”)添加了一个health()方法,以便AWS点击:
class HomeController {
@Secured('IS_AUTHENTICATED_FULLY')
def index() { }
@Secured('permitAll')
def health() { render '' }
}
对我来说,关键是会话cookie在负载均衡器上运行多个实例时没有得到正确处理(直到将最小实例设置为2,我才发现这一点),因此为了让用户能够登录并保持登录状态,我在AWS上执行以下操作:
1. At Services / Elastic Beanstalk / Configuration / Load Balancing
a. set Application health check URL: /health
b. left Session Stickiness: unchecked
2. At Services / EC2 / Load Balancers / Description / Port Configuration:
For both port 80 (HTTP) and 443 (HTTPS)
1. Edit and select 'Enable Application Generated Cookie Stickiness'
2. Cookie Name: JSESSIONID
记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano
我现在一直在努力使用我的登录页面来让组件呈现Loggedin组件。我的前端是Reactjs,后端是NodeJS。我对nodejs、expression和react都是新手。 在loginform组件上,我使用fetch进行了一次post,它将用户名和密码传递给后端的相应endpoint。没问题。在后端,它读取我存储用户(不使用任何数据库)的jsonfile来查找匹配项,如果用户名和密码都匹配,则它
我在Laravel框架中的HomeController.php中有一段代码,但是我无法访问它重定向到登录页面的索引/主页。我犯了什么大错?
这是views.py的内容: 在转到“/”时,我被重定向到“/accounts/login”,它将我带到登录页面。我输入用户名和密码后,在“验证”打印语句printd“登录”到终端。 到目前为止还不错。现在,我不再被重定向到“/”,而是再次被重定向到“/accounts/login”,并再次显示输入用户名和密码的页面。为什么?
当(在Spring Security/MVC中)页面访问被拒绝时,由于用户没有足够的权限(尽管他已通过身份验证),我需要通过显示登录页面(而不是显示403拒绝访问页面的标准行为)提供作为另一个用户登录 我可以编写一个,重定向到登录页面。但是,当Spring Security发现有另一个用户登录时,它会做出怎样的反应?当新用户已成功通过身份验证时,我能否以某种方式注销旧用户?
我使用的是Spring Security 4.1.1,但我遇到了一个问题:我试图访问URL,应用程序会重定向到登录页面。到现在为止,一直都还不错。 但是,成功登录后,应用程序会再次将我重定向到登录页面,并且不会创建任何会话,因此即使尝试直接访问URL(在URL栏中键入),应用程序也会重定向到登录页面。 有一些URL我必须要求登录才能访问它们。其他的,我可以访问无需身份验证。这些我不需要验证的URL