SAML - 如何在Spring SAML扩展(SP)和shibboleth 3.1.1(IDP)之间传输自定义属性

时间:2015-08-15 08:34:58

标签: java spring saml shibboleth

我使用Spring SAML(SP)& amp ;; shibboleth 3.1.1(IDP)和我想知道有没有办法在authRequest和authResponse之间传递自定义属性。让我说我要将我的自定义属性(jobName)从sp发送到idp,idp验证值,以及然后将此值返回给我。

我将md:Extensions md:RequestedAttribute saml:AttributeValue添加到我的sp元数据文件中,并覆盖了WebSSOProfileImpl.java中的getAuthnRequest方法,但生成的authRequest不包含in 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 metada?如果是的话,我该怎么做?在这方面的任何帮助将非常感激。

感谢。 ltdong

1 个答案:

答案 0 :(得分:-1)

我不是Spring Security SAML的专家(还没有:-)),但我觉得你可能编码过多,可以通过更多的XML配置实现你想要的目标。

我确信您可以通过在类extendedMetadata中定义属性MetadataGenerator直接在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>

希望这有点帮助。