Hi all.

I'm using WSO2 Identity Server version 5.8.0 and 5.9.0

I have this scenario: I have external IdPs and I want to allow SAML
integration with these IdPs. I can register them in WSO2 and all works
pretty good.

I was facing the following issue: I need to handle several
AttributeConsumingService. So the first thing I created the WSO2
ServiceProvider metadata file that I gave to the IdPs. This is the metadata
content:

> <?xml version="1.0" encoding="UTF-8"?>
> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
> ID="_3574ad74-ba7a-4ea5-b3e8-dbb2dafb55df" entityID="http://wso2_590_ai";>
>    <md:SPSSODescriptor AuthnRequestsSigned="true"
> WantAssertionsSigned="true"
> protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
>       <md:KeyDescriptor use="signing">
>          <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#";>
>             <ds:X509Data>
>                <ds:X509Certificate><!--Certificate
> info--></ds:X509Certificate>
>             </ds:X509Data>
>          </ds:KeyInfo>
>       </md:KeyDescriptor>
>       <md:SingleLogoutService
> Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="
> https://localhost:9443/samlsso"; />
>
> <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
>       <md:AssertionConsumerService
> Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="
> https://localhost:9443/commonauth"; index="0" isDefault="true" />
>       <md:AttributeConsumingService index="0">
>          <md:ServiceName xml:lang="it">set0</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="Indirizzo mail" Name="email"
> />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>       </md:AttributeConsumingService>
>       <md:AttributeConsumingService index="1">
>          <md:ServiceName xml:lang="it">set1</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="Indirizzo mail" Name="email"
> />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>          <md:RequestedAttribute FriendlyName="Sesso" Name="gender" />
>          <md:RequestedAttribute FriendlyName="Data di nascita"
> Name="dateOfBirth" />
>          <md:RequestedAttribute FriendlyName="Luogo di nascita"
> Name="placeOfBirth" />
>       </md:AttributeConsumingService>
>       <md:AttributeConsumingService index="2">
>          <md:ServiceName xml:lang="it">set2</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="Indirizzo mail" Name="email"
> />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>          <md:RequestedAttribute FriendlyName="Sesso" Name="gender" />
>          <md:RequestedAttribute FriendlyName="Data di nascita"
> Name="dateOfBirth" />
>          <md:RequestedAttribute FriendlyName="Luogo di nascita"
> Name="placeOfBirth" />
>          <md:RequestedAttribute FriendlyName="Nazione di nascita"
> Name="countyOfBirth" />
>       </md:AttributeConsumingService>
>       <md:AttributeConsumingService index="3">
>          <md:ServiceName xml:lang="it">set3</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="Indirizzo mail" Name="email"
> />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>          <md:RequestedAttribute FriendlyName="Sesso" Name="gender" />
>          <md:RequestedAttribute FriendlyName="Data di nascita"
> Name="dateOfBirth" />
>          <md:RequestedAttribute FriendlyName="Luogo di nascita"
> Name="placeOfBirth" />
>          <md:RequestedAttribute FriendlyName="Nazione di nascita"
> Name="countyOfBirth" />
>          <md:RequestedAttribute FriendlyName="Cellulare"
> Name="mobilePhone" />
>       </md:AttributeConsumingService>
>       <md:AttributeConsumingService index="4">
>          <md:ServiceName xml:lang="it">set4</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>       </md:AttributeConsumingService>
>       <md:AttributeConsumingService index="5">
>          <md:ServiceName xml:lang="it">set5</md:ServiceName>
>          <md:RequestedAttribute FriendlyName="Nome" Name="name" />
>          <md:RequestedAttribute FriendlyName="Cognome" Name="familyName" />
>          <md:RequestedAttribute FriendlyName="Codice Fiscale"
> Name="fiscalNumber" />
>          <md:RequestedAttribute FriendlyName="SPID Code" Name="spidCode" />
>          <md:RequestedAttribute FriendlyName="Nome azienda"
> Name="companyName" />
>          <md:RequestedAttribute FriendlyName="Ufficio"
> Name="registeredOffice" />
>          <md:RequestedAttribute FriendlyName="Partita IVA" Name="ivaCode"
> />
>       </md:AttributeConsumingService>
>    </md:SPSSODescriptor>
>    <md:Organization>
>       <md:OrganizationName xml:lang="it">Service provider WSO2
> 590</md:OrganizationName>
>       <md:OrganizationDisplayName xml:lang="it">WSO2
> 590</md:OrganizationDisplayName>
>       <md:OrganizationURL xml:lang="it">https://localhost:9443/
> </md:OrganizationURL>
>    </md:Organization>
> </md:EntityDescriptor>


As you can see I have six AttributeConsumingService. So far so good... the
problem was how to solve this issue: let's suppose I have a Service
Provider registered inside WSO2 IS and let's suppose the application
related to this SP sends in the SAML Request the AttributeConsumingService
index. How can I pass this AttributeConsumingService to the SAML request
that WSO2 sends to the external IdPs? I found only one way: to modify the
>
> org.wso2.carbon.identity.application.authenticator.samlsso.manager.DefaultSAML2SSOManager.buildAuthnRequest(HttpServletRequest,
> boolean, String, AuthenticationContext)

method. Just after this instruction

> //Get the inbound SAMLRequest
> AuthnRequest inboundAuthnRequest = getAuthnRequest(context);


I added the following code:

> Integer attrConsServiceIndex =
> inboundAuthnRequest.getAttributeConsumingServiceIndex();
> if( attrConsServiceIndex != null && attrConsServiceIndex > 0 ) {
>    if( log.isInfoEnabled() ) {
> log.info("Inbound SAML Request AttributeConsumingServiceIndex "+
> attrConsServiceIndex+" Settato nella auth request SAML");
>     }
> authRequest.setAttributeConsumingServiceIndex(attrConsServiceIndex);
> }


In this way if the Application handled by a Service Provider sends an
AttributeConsumingServiceIndex different from 0, this is set in the
AuthnRequest that WSO2 IS builds for the external IdP. I don't know if
there is a different way to solve it but as far as I investigated this is
the only solution I found

Is this a proper way?

If so... I hope you can use it and this can be useful to other people.

Thank you
Angelo
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to