[英]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.