感谢 nobby 和 Sanjeev,我最近将其应用于类似的案例,它让我走上了正确的道路。
作为 Spring Security SAML2 扩展的新手,我必须进行一些额外的挖掘才能应用 WebSSOProfileOptions。 本质上,要在 SAML 身份验证请求上获得 HTTP-POST 绑定,您需要将配置文件选项传递给
org.springframework.security.saml.websso.WebSSOProfileImpl#sendAuthenticationRequest()
方法。
对于我们的配置,它与 Spring RC2 示例项目中的 config 非常相似,这意味着将
WebSSOProfileOptions
bean 传递给 samlEntryPoint.defaultProfileOptions
属性(或在其中添加绑定属性),如 Sanjeev 的解决方案中所述。
问题是,这并没有导致 AuthnRequest 拾取所设置的绑定属性。 在我们的例子中,我们的 SAML 元数据在 HTTP-Artifact 绑定
isDefault=true
上指定 AssertionConsumerService
。 在我们的 Spring Security SAML2 库的 RC2 版本中,这是 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>
在
securityContext.xml
中可以设置 sp 启动的绑定。下面的示例使用了 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
类中找到。
对于任何想要使用 Java 而不是 XML 进行操作的人:
@Bean
public WebSSOProfileOptions profileOptions() {
WebSSOProfileOptions profileOptions = new WebSSOProfileOptions();
profileOptions.setIncludeScoping(false);
profileOptions.setBinding(SAMLConstants.SAML2_POST_BINDING_URI);
return profileOptions;
}
和:
@Bean
public MetadataGeneratorFilter metadataGeneratorFilter() {
return new MetadataGeneratorFilter(metadataGenerator());
}
public MetadataGenerator metadataGenerator() {
MetadataGenerator metadataGenerator = new MetadataGenerator();
metadataGenerator.setAssertionConsumerIndex(1);
// ...
return metadataGenerator;
}