Spring saml 将请求重定向到 http
Posted
技术标签:
【中文标题】Spring saml 将请求重定向到 http【英文标题】:Spring saml redirects the request to http 【发布时间】:2015-09-27 06:41:15 【问题描述】:我正在使用带有 Apache 2.2 + Tomcat 7.0 + OKTA(IdP) 的 spring saml 扩展。 securityContext.xml 如下所示:
元数据生成器过滤器:
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
<property name="entityBaseURL" value="https://myapp.com/api"/>
</bean>
</constructor-arg>
</bean>
上下文提供者:
<bean id="contextProvider" class="org.springframework.security.saml.context.SAMLContextProviderLB">
<property name="scheme" value="https"/>
<property name="serverName" value="myapp.com"/>
<property name="serverPort" value="443"/>
<property name="includeServerPortInRequestURL" value="false"/>
<property name="contextPath" value="/api"/>
<property name="storageFactory">
<bean class="org.springframework.security.saml.storage.EmptyStorageFactory"/>
</property>
</bean>
我使用以下 URL 触发 SP 发起的登录。
https://myapp.com/api/welcome.html
身份验证完成后,浏览器会被重定向到 HTTP 而不是 HTTPS。
http://myapp.com/api/welcome.html
我不知道为什么请求会被重定向到 HTTP。请帮忙。
谢谢
奈良
HTTP 请求转储:
https://docs.google.com/document/d/1mYh-EhDjxMixzZ8krhOg_2fjpTaTu7fuST_nIXAMeVY/edit?usp=sharing
在 OKTA 中,使用以下元数据创建了一个 SAML 2.0 应用:
单点登录 URL => https://myapp.com/api/saml/SSO 收件人 URL => https://myapp.com/api/saml/SSO 目标网址 => https://myapp.com/api/saml/SSO 观众限制 => https://myapp.com/api/saml/metadata 默认中继状态 => https://myapp.com/dashboard.html 名称 ID 格式 => 未指定 响应 => 签名 断言签名 => 签名 签名算法 => RSA_SHA256 摘要算法 => SHA256 断言加密 => 未加密 SAML 单次注销 => 已禁用 authnContextClassRef => PasswordProtectedTransport 请求压缩 => 未压缩 荣誉部队认证 => 是 SAML 发行者 ID => http://www.okta.com/$org.externalKey弹簧配置:
https://docs.google.com/document/d/16iDLcBuwvQ23-mKMFybPfxdIyvqCBi5sbYePgUjl0p4/edit?usp=sharing【问题讨论】:
请转储 IDP 和 SP 之间的 HTTP 请求以及您导入 IDP 的元数据并将其添加到问题中。 弗拉基米尔:感谢您的休息。请根据要求在上方找到附加数据。 Okta 正在响应正确的地址“myapp.com/api/saml/SSO”,因此问题出在 Spring 配置中。您能否发布完整的 Spring 配置? 谢谢弗拉基米尔。请找到 spring 配置的链接。 【参考方案1】:确保您的 IDP 配置了带有 https 断言端点的正确元数据 XML。
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="**https**://../saml/SSO" index="0" isDefault="true" />
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="**https**://.../saml/SSO" index="1" />
【讨论】:
欢迎来到 Stack Overflow!请确保您的答案被表述为作为答案,而不是作为问题。此外,XML 标记是不可见的,除非您将它们放在代码块中,就像我在这里所做的那样。【参考方案2】:我仍然没有看到真正的原因,您的配置看起来不错,但请尝试将当前的 successRedirectHandler
替换为以下内容(当然,将 URL 替换为您自己的),看看问题是否消失:
<bean id="successRedirectHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
<property name="defaultTargetUrl" value="https://yourapp.com/welcome.jsp"/>
</bean>
【讨论】:
谢谢弗拉基米尔。 1)如上设置defaultTargetUrl。尝试了/saml/login。身份验证后,浏览器进入 /welcome.jsp、myokta.com/app/dev400736_devserver_1/exk4e58o6u7P4jjrh0h7/sso/… 和 /saml/SSO 之间的重定向循环。 2) 从 /welcome.jsp(而不是 /saml/login)开始。重定向到 http://.../welcome.jsp 并且浏览器显示连接重置错误。之后,我将方案更改为 https 。然后,我就可以正常打开页面了。 弗拉基米尔,还有一个问题……tomcat 的 server.xml 有以下连接器。 。会不会是重定向问题的根源? 将安全属性添加到连接器后,重定向正确发生。 只是为那些仍有问题的人添加。除了这个修复之外,我还必须将setAlwaysUseDefaultTargetUrl
设置为 true 才能正常工作。以上是关于Spring saml 将请求重定向到 http的主要内容,如果未能解决你的问题,请参考以下文章
在 ELB 后面使用带有 Spring Boot 的 SAML 重定向到 http 而不是 https
Spring Security SAML,使用 SAMLContextProviderLB 设置为 HTTPs 方案时重定向到 HTTP 而不是 HTTPS
AADSTS750054:SAMLRequest 或 SAMLResponse 必须作为查询字符串参数出现在 SAML 重定向绑定的 HTTP 请求中