在Spring Security SAML身份验证请求中配置POST ProtocolBinding

5lhxktic  于 2022-12-10  发布在  Spring
关注(0)|答案(3)|浏览(184)

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绑定?谢谢您的解答!
--安德烈亚斯

vlju58qv

vlju58qv1#

感谢nobby和Sanjeev,我最近把这个应用到了一个类似的案例中,它让我走上了正确的道路。
作为Spring Security SAML 2扩展的新手,我不得不做一些额外的工作来应用WebSSOProfileOptions。本质上,要在SAML身份验证请求上获得HTTP-POST绑定,您需要将配置文件选项传递给org.springframework.security.saml.websso.WebSSOProfileImpl#sendAuthenticationRequest()方法。
对于我们的配置,它与config in the Spring RC2 sample project非常相似,这意味着将Sanjeev的解决方案中描述的WebSSOProfileOptions bean传递给samlEntryPoint.defaultProfileOptions属性(或在那里添加一个绑定属性)。
问题是,这并没有导致AuthnRequest按照设置获取绑定属性。在我们的示例中,SAML元数据在HTTP-Artifact绑定的AssertionConsumerService上指定isDefault=true。在RC 2版本的Spring Security SAML 2库中,这是org.springframework.security.saml.metadata.MetadataGenerator的默认行为。
这可以通过设置MetadataGenerator的assertionConsumerIndex属性来覆盖。

<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>
vktxenjb

vktxenjb2#

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类中找到。

9rygscc1

9rygscc13#

对于任何希望使用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;
}

相关问题