Как я могу добавить объявление «Организация» в метаданные SP (Spring SAML)? - PullRequest
1 голос
/ 06 августа 2020

Есть ли способ включить информацию об Организации в метаданные сгенерированного SP с помощью Spring Security ? Потому что по умолчанию я не вижу его включенным в сгенерированные метаданные XML.

То, что я получаю сейчас

Я попытался создать собственный класс SAMLMetadataGenerator, который расширяет класс фреймворка MetadataGenerator, а затем попытался переопределить метод buildExtensions следующим образом:

public class SAMLMetadataGenerator extends MetadataGenerator {

   @Override
   protected Extensions buildExtensions(String entityBaseURL, String entityAlias) {
        super.setIncludeDiscoveryExtension(true);
        Extensions extensions = super.buildExtensions(entityBaseURL, entityAlias);
        if (extensions != null)
            extensions.getUnknownXMLObjects().add(generateOrganization());

        return extensions;
   }

   private Organization generateOrganization() {
    OrganizationBuilder organizationBuilder = new OrganizationBuilder();
    Organization organization = organizationBuilder.buildObject();

    OrganizationNameBuilder organizationNameBuilder = new OrganizationNameBuilder();
    OrganizationName organizationName = organizationNameBuilder.buildObject();
    organizationName.setName(new LocalizedString("ACME", "en"));

    OrganizationDisplayNameBuilder displayNameBuilder = new OrganizationDisplayNameBuilder();
    OrganizationDisplayName organizationDisplayName = displayNameBuilder
            .buildObject();
    organizationDisplayName.setName(new LocalizedString("ACME Corporation", "en"));

    OrganizationURLBuilder organizationURLBuilder = new OrganizationURLBuilder();
    OrganizationURL organizationURL = organizationURLBuilder.buildObject();
    organizationURL.setURL(new LocalizedString("http://spid.serviceprovider.it", "it"));

    organization.getOrganizationNames().add(organizationName);
    organization.getDisplayNames().add(organizationDisplayName);
    organization.getURLs().add(organizationURL);
    return organization;
   }
}

Таким образом, полученные метаданные SP будут:

<md:EntityDescriptor
    xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="com_xegiy84105_spring_sp" entityID="com:xegiy84105:spring:sp">
    <!-- Other things here -->
    <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <md:Extensions>
            <idpdisco:DiscoveryResponse
                xmlns:idpdisco="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Binding="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Location="http://localhost:8091/DM-WEB/saml/login?disco=true" index="0"/>
            <md:Organization>
                <md:OrganizationName xml:lang="en">ACME</md:OrganizationName>
                <md:OrganizationDisplayName xml:lang="en">ACME Corporation</md:OrganizationDisplayName>
                <md:OrganizationURL xml:lang="it">http://spid.serviceprovider.it</md:OrganizationURL>
            </md:Organization>
        </md:Extensions>
        <!-- Other things here -->
    </md:SPSSODescriptor>
</md:EntityDescriptor>

Как это должно быть на самом деле

Но блок «Организация» должен быть вставлен без окружения <md:Extensions/> и должен быть размещен как прямой дочерний элемент элемента * Блок 1023 * похож на следующий фрагмент :

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
    entityID="https://spid.serviceprovider.it"
    ID="_0j40cj0848d8e3jncjdjss...">
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        [...]
    </ds:Signature>
    <md:SPSSODescriptor
        protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"
        AuthnRequestsSigned="true"
        WantAssertionsSigned="true">
        [...]
    </md:SPSSODescriptor>
    <md:Organization>
        <OrganizationName xml:lang="it">Service provider</OrganizationName>
        <OrganizationDisplayName xml:lang="it">Nome service provider</OrganizationDisplayName>
        <OrganizationURL xml:lang="it">http://spid.serviceprovider.it</OrganizationURL>
    </md:Organization>
</md:EntityDescriptor>

Каким образом можно достичь этой цели? Спасибо.

1 Ответ

1 голос
/ 11 августа 2020

Причина, по которой он находится в расширениях, заключается в следующем:

extensions.getUnknownXMLObjects().add(generateOrganization());

согласно документам для MetadataGenerator вы можете использовать:

generateMetadata()

, который возвращает EntityDescriptor , к которому вы можете добавить организацию:

setOrganization(generateOrganization());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...