2016-05-30 4 views
0

Gibt es eine Möglichkeit, erforderliche Ansprüche in die Metadatenantwort einer vertrauenden Seite mithilfe von spring-security-saml aufzunehmen?Fügen Sie die erforderlichen Ansprüche in RP-Metadaten mithilfe von spring-security-saml ein

Idealerweise würde ich gerne eine Verbund-Metadaten-URL für verschiedene IdPs bereitstellen, die auch angibt, welche Anspruchstypen wir als RP benötigen (d. H. E-Mail-Adresse, Vorname, Nachname usw.). Ich teste gerade mit ADFS als Identitätsanbieter. Wenn eine vertrauende Vertrauen mit den Assistenten Hinzufügen der RP-Metadaten-URL verwendet wird, ist die größte Teil der Informationen vorgefüllter mit Ausnahme der „Accepted Ansprüche“ aus.

Microsoft ADFS "Add Relying Party Trust Wizard

Ich habe versucht, die Metadaten-XML manuell zu ändern (wie in the docs angegeben) ClaimTypesRequired oder ClaimTypesRequested Elemente innerhalb RoleDescriptor aufzunehmen, obwohl ich nicht sicher bin, was hinzuzufügen ... Ich würde auch Wenn möglich, bleiben Sie lieber bei den automatisch generierten Metadaten.

Ist mein Verständnis für die RP-Metadaten-URL korrekt? Oder würde ich besser Bereitstellung IdPs mit der URL und dann sagen sie, um zusätzliche Ansprüche hinzuzufügen.

Antwort

0

Es gibt keine standardmäßige Unterstützung für angeforderte Ansprüche in automatisch generierten Spring-SAML-Metadaten. Aber Sie können die MetadataGenerator class erweitern die zusätzlichen Daten zu exportieren, wie Sie benötigen.

2

Dank Vladimír Vorschlag erweitert ich MetadataGenerator Klasse die AttributeConsumingService und RequestedAttribute Elemente hinzuzufügen, wie folgt. Ich poste es hier, nur für den Fall, dass es jemandem hilft.

public class MySAMLMetadataGenerator extends MetadataGenerator 
{ 
    @Override 
    protected SPSSODescriptor buildSPSSODescriptor(String entityBaseURL, String entityAlias, boolean requestSigned, boolean wantAssertionSigned, Collection<String> includedNameID) 
    { 
     SPSSODescriptor descriptor = super.buildSPSSODescriptor(entityBaseURL, entityAlias, requestSigned, wantAssertionSigned, includedNameID); 
     descriptor.getAttributeConsumingServices().add(generateConsumingService()); 
     return descriptor; 
    } 

    private AttributeConsumingService generateConsumingService() 
    { 
     SAMLObjectBuilder<AttributeConsumingService> builder = (SAMLObjectBuilder<AttributeConsumingService>) builderFactory.getBuilder(AttributeConsumingService.DEFAULT_ELEMENT_NAME); 
     AttributeConsumingService service = builder.buildObject(); 

     SAMLObjectBuilder<ServiceName> builder2 = (SAMLObjectBuilder<ServiceName>) builderFactory.getBuilder(ServiceName.DEFAULT_ELEMENT_NAME); 
     ServiceName serviceName = builder2.buildObject(); 
     serviceName.setName(new LocalizedString("application name", "en")); 
     service.getNames().add(serviceName); 

     SAMLObjectBuilder<ServiceDescription> builder3 = (SAMLObjectBuilder<ServiceDescription>) builderFactory.getBuilder(ServiceDescription.DEFAULT_ELEMENT_NAME); 
     ServiceDescription serviceDescription = builder3.buildObject(); 
     serviceDescription.setDescription(new LocalizedString("Application description", "en")); 
     service.getDescriptions().add(serviceDescription); 

     SAMLObjectBuilder<RequestedAttribute> builder4 = (SAMLObjectBuilder<RequestedAttribute>) builderFactory.getBuilder(RequestedAttribute.DEFAULT_ELEMENT_NAME); 
     RequestedAttribute nameId = builder4.buildObject(); 
     nameId.setIsRequired(true); 
     nameId.setFriendlyName("Name ID"); 
     nameId.setName("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"); 
     nameId.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri"); 
     service.getRequestAttributes().add(nameId); 

     RequestedAttribute email = builder4.buildObject(); 
     email.setIsRequired(true); 
     email.setFriendlyName("E-Mail Address"); 
     email.setName("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"); 
     email.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri"); 
     service.getRequestAttributes().add(email); 

     RequestedAttribute givenName = builder4.buildObject(); 
     givenName.setIsRequired(true); 
     givenName.setFriendlyName("Given Name"); 
     givenName.setName("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"); 
     givenName.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri"); 
     service.getRequestAttributes().add(givenName); 

     RequestedAttribute surname = builder4.buildObject(); 
     //surname.setIsRequired(true); 
     surname.setFriendlyName("Surname"); 
     surname.setName("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"); 
     surname.setNameFormat("urn:oasis:names:tc:SAML:2.0:attrname-format:uri"); 
     service.getRequestAttributes().add(surname); 

     service.setIndex(1); 

     return service; 
    } 
} 

Leider Microsoft ADFS Server doesn't seem to support diese Attribute automatisch Ansprüche setzen. So stört nicht Ihre Zeit damit verschwenden, um es arbeiten wie ich!

Verwandte Themen