On Monday, October 28, 2019, Angelo Immediata <[email protected]> wrote:
> 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 > -- Farasath Ahamed Associate Technical Lead, WSO2 Inc.: http://wso2.com Mobile: +94777603866 Blog: https://farasath.blogspot.com / https://medium.com/@farasath Twitter: @farazath619 <https://twitter.com/farazath619> <http://wso2.com/signature>
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
