我使用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
答案 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>
希望这有点帮助。