在 Spring Security SAML 身份验证请求中配置 POST ProtocolBinding
Posted
技术标签:
【中文标题】在 Spring Security SAML 身份验证请求中配置 POST ProtocolBinding【英文标题】:Configure POST ProtocolBinding in Spring Security SAML authentication request 【发布时间】:2012-11-23 14:19:45 【问题描述】:Spring Security SAML 坚持在 SAML 认证请求中请求 Artifact 绑定(ProtocolBinding 属性):
<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="http://sp.com/saml/SSO/alias/defaultAlias"
Destination="https://idp.com/idp"
ForceAuthn="false"
ID="a4acj06d42fdc0d3494h859g3f7005c"
IsPassive="false"
IssueInstant="2012-12-05T17:07:18.271Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"
Version="2.0"
>
如何配置 POST 绑定? 感谢您的任何回答!
-- 安德烈亚斯
【问题讨论】:
【参考方案1】:感谢 nobby 和 Sanjeev,我最近将此应用于一个类似的案例,它让我走上了正轨。
作为 Spring Security SAML2 扩展的新手,我不得不做一些额外的挖掘工作才能应用 WebSSOProfileOptions。本质上,要在 SAML 身份验证请求上获得 HTTP-POST 绑定,您需要将配置文件选项传递给 org.springframework.security.saml.websso.WebSSOProfileImpl#sendAuthenticationRequest()
方法。
对于我们的配置,它与 config in the Spring RC2 sample project 非常相似,这意味着将 WebSSOProfileOptions
bean 如 Sanjeev 的解决方案中所述传递给 samlEntryPoint.defaultProfileOptions
属性(或在那里添加绑定属性)。
问题是,这并没有导致 AuthnRequest 获取设置的绑定属性。在我们的例子中,我们的 SAML 元数据在 HTTP-Artifact 绑定 AssertionConsumerService
上指定了 isDefault=true
。在我们的 RC2 版本的 Spring Security SAML2 库中,这是org.springframework.security.saml.metadata.MetadataGenerator
的默认行为。
这可以通过设置 MetadataGenerator 的 assertionConsumerIndex
属性来覆盖。在我们的例子中,HTTP Post 断言消费者在索引 1 处配置。
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
<property name="assertionConsumerIndex" value="1" /><!-- 1=HTTP-POST -->
</bean>
</constructor-arg>
</bean>
【讨论】:
你就是男人!!!您在这里的评论准确地回答了我正在努力解决的问题。非常感谢! 索引值为 1 有效,因为 MetadataGenerator 的默认绑定 SSO 列表是“artifact”、“post”、“paos”。重新定义 bindingsSSO 属性,以便“发布”首先为我工作。<property name="bindingsSSO"><list><value>POST</value>...</property>
【参考方案2】:
在securityContext.xml
中可以设置sp-initiated binding。下面的示例使用了 HTTP-POST
<bean class="org.springframework.security.saml.websso.WebSSOProfileOptions">
<property name="includeScoping" value="false"/>
<property name="binding" value="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/>
</bean>
绑定的值可以在org.opensaml.common.xml.SAMLConstants
类中找到。
【讨论】:
以上是关于在 Spring Security SAML 身份验证请求中配置 POST ProtocolBinding的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 在一个应用程序中结合数据库和 SAML 身份验证
如何在同一应用程序中使用 spring-sample 示例配置 Spring Security 基本身份验证和 SAML 身份验证
SAML 身份验证的用户不会出现在 Spring Security 的 SessionRegistry 中