【问题标题】:SAML - how transfer custom attributes between Spring SAML extension(SP) and shibboleth 3.1.1(IDP)SAML - 如何在 Spring SAML 扩展(SP)和 shibboleth 3.1.1(IDP)之间传输自定义属性
【发布时间】:2015-11-08 11:22:24
【问题描述】:

我已经使用 spring SAML(SP) 和 shibboleth 3.1.1(IDP) 实现了 SSO,我想知道有没有办法在 authRequest 和 authResponse 之间传输自定义属性。假设我想发送我的自定义属性( jobName) 从 sp 到 idp,idp 验证值,然后把这个值返回给我。

我将 md:Extensions md:RequestedAttribute saml:AttributeValue 添加到我的 sp 元数据文件中,并覆盖 WebSSOProfileImpl.java 中的 getAuthnRequest 方法,但生成的 authRequest 不包含 md:RequestedAttribute 中的。

<md:Extensions xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
    <md:RequestedAttribute Name="urn:oid:0.9.2342.19200300.100.1.3"
        NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
        isRequired="true"></md:RequestedAttribute>
</md:Extensions>

@Override
protected AuthnRequest getAuthnRequest(SAMLMessageContext context, WebSSOProfileOptions options, AssertionConsumerService assertionConsumer, SingleSignOnService bindingService) throws SAMLException, MetadataProviderException {
    AuthnRequest authnRequest = super.getAuthnRequest(context, options, assertionConsumer, bindingService);
    authnRequest.setExtensions(buildExtensions());
    authnRequest.setAttributeConsumingServiceIndex(1);
    return authnRequest;
}

protected Extensions buildExtensions() {

    Extensions extensions = new ExtensionsBuilder().buildObject();
    RequestedAttribute reqAttribute = new RequestedAttributeBuilder().buildObject();        

    reqAttribute.setName("urn:oid:0.9.2342.19200300.100.1.3");
    reqAttribute.setNameFormat(AtomicRequestedAttribute.URI_REFERENCE);
    reqAttribute.setIsRequired(true);

    XSAny extraElement = new XSAnyBuilder().buildObject("saml:AttributeValue", "AttributeValue", "saml");
    extraElement.setTextContent("myjobName");

    reqAttribute.getAttributeValues().add(extraElement);

    extensions.getUnknownXMLObjects().add(reqAttribute);
    return extensions;

}

<md:AttributeConsumingService index="1">
    <md:ServiceName xml:lang="en">The Demo Test</md:ServiceName>
    <md:RequestedAttribute FriendlyName="eduPersonScopedAffiliation" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true" >
        <saml2:AttributeValue>jobname1</saml2:AttributeValue>
        <saml2:AttributeValue>jobname2@</saml2:AttributeValue>
    </md:RequestedAttribute>
</md:AttributeConsumingService>

我不知道该怎么做?我是否也应该使用这个额外的属性名称和格式来修改我的 SP 元数据?如果是,我该怎么做?非常感谢这方面的任何帮助。

谢谢。 呵呵

【问题讨论】:

    标签: java spring saml shibboleth


    【解决方案1】:

    我不是 Spring Security SAML 方面的专家(还不是 :-)),但我感觉您可能编码过多,并且可以通过更多 XML 配置来实现您想要的。

    我确信您可以通过在类 MetadataGenerator 中定义属性 extendedMetadata 来直接在您的 SP 配置中生成一些扩展元数据。

    我已经在我的applicationContext-security-saml.xml 文件中做到了这一点:

    <!-- Filter automatically generates default SP metadata -->
    <b:bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
        <b:constructor-arg>
            <b:bean class="org.springframework.security.saml.metadata.MetadataGenerator">
                <b:property name="includeDiscoveryExtension" value="true"/>
                <b:property name="extendedMetadata">
                    <b:bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                        <b:property name="SOME_PROPERTY" value="SOME_VALUE"/>
                        ...
                    </b:bean>
                </b:property>
            </b:bean>
        </b:constructor-arg>
    </b:bean>
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2017-02-06
      • 2023-01-24
      • 2021-12-10
      • 2014-12-19
      • 2014-12-24
      • 2018-11-12
      相关资源
      最近更新 更多