繁体   English   中英

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

[英]SAML - how transfer custom attributes between Spring SAML extension(SP) and shibboleth 3.1.1(IDP)

我已经使用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元数据? 如果是,我该怎么办? 在这方面的任何帮助将不胜感激。

谢谢。 ong

我不是Spring Security SAML的专家(尚未:-)),但是我感觉您可能编码过多,并且可以通过更多XML配置来实现所需的功能。

我肯定可以通过在类MetadataGenerator定义属性extendedMetadata来直接在SP配置中生成一些扩展元MetadataGenerator

我已经在我的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>

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM