/
Google Apps for Education

Google Apps for Education

Overview

This will describe how to get Shibboleth 3.4.x working with Google Apps for Education

Shibboleth IDP Configuration

In the code below:

Replace university.edu which your Google Domain.

----------

relying-party.xml

Find the section that says

relying-party.xml
    <util:list id="shibboleth.RelyingPartyOverrides">
.
.
.
   </util:list>

And add in between:

relying-party.xml
        <bean parent="RelyingPartyByName" c:relyingPartyIds="google.com/a/university.edu">
            <property name="profileConfigurations">
                <list>
                    <bean parent="SAML2.SSO" p:encryptAssertions="false" />
                </list>
            </property>
        </bean>

The above turns off encrypted assertions which Google does not support.

Create your google-university-metadata.xml, it should look like this:

google-university-metadata.xml
<EntityDescriptor entityID="google.com/a/university.edu" 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:emailAddress</NameIDFormat>
           <AssertionConsumerService index="1" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
           Location="https://www.google.com/a/university.edu/acs" />
       </SPSSODescriptor>
</EntityDescriptor>

In your metadata-providers.xml file add the following:

metadata-providers.xml
    <MetadataProvider id="Google”  xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/google-university-metadata.xml"/>

In your attribute-resolver.xml, add the following:

attribute-resolver.xml
    <AttributeDefinition xsi:type="Simple" id="mail">
        <InputDataConnector ref="myLDAP" attributeNames="mail"/>
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
    </AttributeDefinition>

This is of course, if you have your email address stored in the mail attribute in LDAP.

For instance, mine would be melvin.lasky@university.edu

In your attribute-filter.xml, add the following:

attribute-filter.xml
<!-- G Suite (Google Apps)  -->
<AttributeFilterPolicy id="google.com/a/university.edu">
   <PolicyRequirementRule xsi:type="Requester" value="google.com/a/university.edu" />
      <AttributeRule attributeID="mail">
          <PermitValueRule xsi:type="ANY" />
      </AttributeRule>
</AttributeFilterPolicy>

Note: Google does not appear to care what attribute you send for mail, just ensure it is the same in the saml-nameid.xml.

And lastly, in your saml-nameid.xml, uncomment the following beans (they are commented out by default):

saml-nameid.xml
.
.
.
        <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
            p:omitQualifiers="true"
            p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
            p:attributeSourceIds="#{ {'mail'} }" />

.
.
.      

        <bean parent="shibboleth.SAML1AttributeSourcedGenerator"
            p:omitQualifiers="true"
            p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
            p:attributeSourceIds="#{ {'mail'} }" />       

------

Now, on your Google Apps for Education Admin portal

Sign In Page:

https://shibserver.university.edu/idp/profile/SAML2/Redirect/SSO

Sign Out Page:

https://shibserver.university.edu/idp/profile/Logout

And make sure “Use a domain specific issuer” is checked. 

Also, that verification certificate is your idp-signing.crt

That's it.  Once you have completed the above, you should have a working Google Apps for Education instance authenticating off of your Shibboleth server.



Related content

MetadataConfiguration
MetadataConfiguration
Read with this
SAManage
SAManage
More like this
MetadataManagementBestPractices
MetadataManagementBestPractices
Read with this
CasProtocolConfiguration
CasProtocolConfiguration
More like this
FileBackedHTTPMetadataProvider
FileBackedHTTPMetadataProvider
Read with this
Eiseverywhere (aka eventscloud.com)
Eiseverywhere (aka eventscloud.com)
More like this