首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用SAMLContextProviderLB设置到HTTPS方案时,Security重定向到HTTP而不是HTTPs

当使用SAMLContextProviderLB设置到HTTPS方案时,Security重定向到HTTP而不是HTTPs
EN

Stack Overflow用户
提问于 2016-03-07 23:50:19
回答 1查看 4.7K关注 0票数 9

附加了我的SAMLContextProviderLB bean上下文提供程序

代码语言:javascript
复制
**<property name="scheme" value="https"/>**
        <property name="serverName" value="${sp.hostname}"/>
        <property name="serverPort" value="#{'${sp.ssl.port}'=='' ? 443 : '${sp.ssl.port}'}"/>
        <property name="includeServerPortInRequestURL" value="#{'${sp.ssl.port}'=='443' ? false : true }"/>
        <property name="contextPath" value="/${sp.context.root}"/>

我在反向代理的后面,所以我正在卸载SSL终端。后端服务器本身正在侦听非SSL,但是webtier正在为我们终止ssl并将其转发到非ssl端口。我已经用上面的属性设置了SAMLContextProviderLB,这样即使后端是https,它也知道如何将saml令牌的预期接收方映射为https受众。然而,当我转到受保护的资源时,我在下面的日志中看到的是它在浏览器上返回的垃圾。当我在浏览器中将其更改为https时,它按预期工作。查看下面的日志显示,从DefaultSavedRequest url 返回的值应该是HTTPs.

2016-03-07 18:24:11,907 INFO org.springframework.security.saml.log.SAMLDefaultLogger.log:127 - AuthNResponse;SUCCESS;10.4.203.88;https://myserver:89/fct;https://www.myADFS.com/adfs/services/trust;camachof@email.com;;

2016-03-07 18:24:11,909调试org.springframework.security.saml.SAMLProcessingFilter.successfulAuthentication:317 -身份验证成功。更新包含: org.springframework.security.providers.ExpiringUsernameAuthenticationToken@830e9237:主体: camachof@email.com;凭据:受保护;验证:真;详细信息: null;未授予任何授权

2016-03-07 18:24:11,910调试org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess:79 -重定向到DefaultSavedRequest Url:http://myserver:89/fct/page

2016-03-07 18:24:11:11调试org.springframework.security.web.DefaultRedirectStrategy.sendRedirect:36 -重定向到“http://myserver:89/fct/page

2016-03-07 18:24:11,911调试org.springframework.security.web.context.HttpSessionSecurityContextRepository.saveContext:292 - SecurityContext存储到HttpSession:'org.springframework.security.core.context.SecurityContextImpl@830e9237:身份验证: org.springframework.security.providers.ExpiringUsernameAuthenticationToken@830e9237:主体: camachof@email.com;凭据:受保护;身份验证:真;详细信息: null;未授予任何权限‘

2016-03-07 18:24:11,912调试org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter:97 - SecurityContextHolder已清除,请求处理已完成

有什么想法,如何强迫这个HTTPS在这个设置下?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 02:46:53

这个问题是旧的,但如果我发现了,别人可能会,所以我会张贴一个答案。

您的负载均衡器或反向代理(Apache httpdnginx)必须为您做一些额外的工作。Spring (或Spring Boot)和嵌入式Tomcat (或Jetty)认为它们在运行http服务器。这是它在做的。如果代理传递一些头变量,Tomcat将开始认为它正在运行https

下面是Apache需要的示例:

代码语言:javascript
复制
ProxyPreserveHost On
RequestHeader add X-Forwarded-Proto https
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

ProxyPassProxyPassReverse是您可能已经拥有的。但是ProxyPreserveHostX-Forwarded-Proto真的很重要。

请查看弹簧启动文件的这一部分。如果设置了X-Forwarded-ForX-Forwarded-Proto,则需要将其添加到application.properties文件中:

代码语言:javascript
复制
server.use-forward-headers=true

和/或

代码语言:javascript
复制
server.forward-headers-strategy=native

取决于您使用的spring引导的哪个版本。

您还将在该文档中看到,您可以为Tomcat特定的配置添加这些属性:

代码语言:javascript
复制
server.tomcat.remote-ip-header=x-your-remote-ip-header
server.tomcat.protocol-header=x-your-protocol-header

除了上面的之外,执行所有这些,它就会开始工作。上面的内容本身并不足以迫使Tomcat开始使用https转发请求。

我发现,因为我的公司有一个基于硬件的负载均衡器(由Rackspace管理),所以很难将其配置为进行这些更改。因此,我们在防火墙/负载均衡器中执行SSL终止,然后在端口80上将请求转发给Apache,而Apache在端口8080上将请求转发给Java。是的,真是一团糟。但这些废话都起作用了。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35856438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档