SSO with multiple Google domains

Andrew Cheung acheung at brookfieldres.com
Mon Jan 19 10:21:26 EST 2015


Hi. I need help in configuring Shibboleth for SSO to multiple Google
domains. Here is my scenario :

Shibboleth version used : 2.4.3

At Google,  the primary domain is: dev.mysiteA.ca

We also have a secondary domain : dev.mysiteB.com

We have 1 IDP set up on RHEL 6.5, on tomcat7. We also integration with
Novell eDirectory (this is our user store) using LDAP.

Before I did anything for the secondary domain, the configuration that I
have set up for the primary domain works and I can SSO to the primary
domain works fine (I go to http://mail.google.com/a/dev.mysiteA.ca, put in
my credentials and can log into my email account at dev.mysiteA.ca).

Howerver, when I tried adding in the configuration for the secondary domain
(see below for the configurations), and then go to “
http://mail.google.com/a/dev.mysiteB.com, I got the error “Invalid Email”.

I used SAML tracer in firefox to examine the SAML requests, and observed
that the first SAML request has

AssertionConsumerServiceURL="https://www.google.com/a/dev.mysiteA.ca/acs"

although I am trying to access http://mail.google.com/dev.mysiteB.com

The SAML response has

<saml2p:Response Destination="https://www.google.com/a/dev.mysiteA.ca/acs"

instead of the secondary domain (dev.mysiteB.com) as well.

My question is : How should I configure the secondary domain so that users
in either the primary domain or the secondary domain can SSO to their
respective domains properly?

Any help is appreciated.

 -Andrew

---------------------------------------------------------

The configuration I used that yields the above behaviour is as follows:

attribute-filter.xml :

<!-- Google dev.mysiteA.ca -->

<afp:AttributeFilterPolicy id="releaseTransientIdToAnyoneGoogleA">

 <afp:PolicyRequirementRule xsi:type="basic:NOT">

   <basic:Rule xsi:type="basic:AttributeRequesterString" value="
mail.google.com/a/dev.mysiteA.ca" />

 </afp:PolicyRequirementRule>

  <afp:AttributeRule attributeID="transientId">

   <afp:PermitValueRule xsi:type="basic:ANY" />

 </afp:AttributeRule>

</afp:AttributeFilterPolicy>

<!-- Google dev.mysiteB.com-->



<afp:AttributeFilterPolicy id="releaseTransientIdToAnyoneGoogleB">

 <afp:PolicyRequirementRule xsi:type="basic:NOT">

   <basic:Rule xsi:type="basic:AttributeRequesterString" value="
mail.google.com/a/dev.mysiteB.com" />

 </afp:PolicyRequirementRule>

 <afp:AttributeRule attributeID="transientId">

   <afp:PermitValueRule xsi:type="basic:ANY" />

 </afp:AttributeRule>

</afp:AttributeFilterPolicy>

  <!-- Google  -->



<afp:AttributeFilterPolicy id="releaseGoogleNameID">

 <afp:PolicyRequirementRule xsi:type="basic:NOT">

    <basic:Rule xsi:type="basic:AttributeRequesterString" value="google.com
"/>

 </afp:PolicyRequirementRule>

 <afp:AttributeRule attributeID="GoogleNameID">

   <afp:PermitValueRule xsi:type="basic:ANY" />

 </afp:AttributeRule>

</afp:AttributeFilterPolicy>

-----------------------------

attribute-resolver.xml :

<!-- Google  -->

<resolver:AttributeDefinition id="GoogleNameID" xsi:type="ad:Simple"
 sourceAttributeID="cn">

 <resolver:Dependency ref="myLDAP" />

 <resolver:AttributeEncoder xsi:type="enc:SAML1StringNameIdentifier"
nameFormat="urn:mace:shibboleth:1.0:nameIdentifier"/>

 <resolver:AttributeEncoder xsi:type="enc:SAML2StringNameID"
nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>

</resolver:AttributeDefinition>

….

 <resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"

       ldapURL="ldap://1.2.3.4:389"

       baseDN="ou=users,o=myCompany"

       principal="cn=loginuser,ou=users,o=myCompany"

       principalCredential="mypassword">

       <dc:FilterTemplate>

           <![CDATA[

               (cn=$requestContext.principalName)

           ]]>

       </dc:FilterTemplate>

---------------------------------------

handler.xml :

<ph:LoginHandler xsi:type="ph:UsernamePassword"


jaasConfigurationLocation="file:///opt/shibboleth-idp/conf/login.config">

       <ph:AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</ph:AuthenticationMethod>

   </ph:LoginHandler>



--------------------------------

relying-party.xml :

<rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile"
includeAttributeStatement="true"

                                assertionLifetime="PT5M"
assertionProxyCount="0"

                                signResponses="always"
signAssertions="always"

                                encryptAssertions="never"
encryptNameIds="never"

                                includeConditionsNotBefore="true"/>


<!-- Google -->

   <rp:RelyingParty id="google.com"

       provider="https://idp.mycompany.com/idp/shibboleth"

       defaultSigningCredentialRef="IdPCredential">

   <rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile"
encryptAssertions="never" encryptNameIds="never" />

</rp:RelyingParty>


<!-- Load the IdP's own metadata.  This is necessary for artifact support.
-->

       <metadata:MetadataProvider id="IdPMD"
xsi:type="metadata:FilesystemMetadataProvider"


metadataFile="/opt/shibboleth-idp/metadata/idp-metadata.xml"

                                  maxRefreshDelay="P1D" />

     <metadata:MetadataProvider xsi:type="FilesystemMetadataProvider"
xmlns="urn:mace:shibboleth:2.0:metadata" id="GoogleMD"
metadataFile="/opt/shibboleth-idp/metadata/googledev-metadata.xml" />



 <security:Credential id="IdPCredential" xsi:type="security:X509Filesystem">

       <security:PrivateKey>/opt/shibboleth-idp/credentials/idp.key</security:PrivateKey>

       <security:Certificate>/opt/shibboleth-idp/credentials/idp.crt</security:Certificate>

   </security:Credential>

-----------------

googledev-metadata.xml:

<EntityDescriptor entityID="google.com"
xmlns="urn:oasis:names:tc:SAML:2.0:metadata">

   <SPSSODescriptor
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">

       <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>

       <AssertionConsumerService index="1"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"

           Location="https://www.google.com/a/dev.mysiteA.ca/acs" />

       <AssertionConsumerService index="2"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"

           Location="https://www.google.com/a/dev.mysiteB.com/acs" />

   </SPSSODescriptor>

</EntityDescriptor>




-- 

*Andrew Cheung*

Senior Developer



*Royal LePage Real Estate Services / Brookfield Real Estate Services*

39 Wynford Drive, Toronto, ON M3C 3K5

*T* 416.510.5734  *V* 415734

Email: acheung at b <X at royallepage.ca>rookfieldres.com

www.royallepage.ca

Download our iPhone App
<https://itunes.apple.com/ca/app/royal-lepage-canada/id810365559?mt=8>


*Join Royal LePage on:*

Facebook <https://www.facebook.com/royallepage>  |  LinkedIn
<http://www.linkedin.com/company/royal-lepage>  |  Twitter
<https://twitter.com/royal_Lepage>  |  Google+
<https://plus.google.com/u/0/+royallepage/posts>  |  Pinterest
<http://www.pinterest.com/rlpcanada/>  |  YouTube
<https://www.youtube.com/user/RoyalLePageCanada> |  Instagram
<http://www.instagram.com/royal_lepage>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://shibboleth.net/pipermail/users/attachments/20150119/db74e31f/attachment-0001.html 


More information about the users mailing list