2015-08-15 4 views
0

Я реализовал SSO с использованием Spring SAML (SP) & shibboleth 3.1.1 (IDP), и мне интересно, есть ли там любой способ передачи пользовательского атрибута между authRequest и authResponse. Предположим, я хочу отправить свой пользовательский атрибут (имя_пользователя) из sp в idp, idp проверить значение, а затем вернуть это значение мне.SAML - как передавать пользовательские атрибуты между Spring SAML extension (SP) и shibboleth 3.1.1 (IDP)

добавить мкр: Extensions мкр: RequestedAttribute SAML: AttributeValue в мой файл зр метаданных и overide метод getAuthnRequest в WebSSOProfileImpl.java, но генерируемый authRequest не содержат в мд: 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>[email protected]</saml2:AttributeValue> 
    </md:RequestedAttribute> 
</md:AttributeConsumingService> 

У меня нет подсказки, как это сделать? Должен ли я изменить свой метаданный SP вместе с этим дополнительным именем и форматом атрибута? Если да, как мне это сделать? Любая помощь в этом отношении была бы действительно оценена.

Спасибо. ltdong

ответ

-1

Я не эксперт с SAML Spring Security (еще нет :-)), но у меня такое ощущение, что вы можете слишком много кодировать и можете достичь того, чего хотите по большей части конфигурации XML.

Я точно знаю, что вы можете сгенерировать некоторые расширенные метаданные непосредственно в вашей конфигурации 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> 

Надеется, что это помогает немного.

 Смежные вопросы

  • Нет связанных вопросов^_^