Obsah

Integrace se službami Google

Budete-li postupovat podle tohoto návodu, měli byste velice dobře rozumět tomu, co přesně ve kterém kroku děláte a jaké to má následky. Musíte totiž vypnout šifrování XML assertion.

Chápete-li, co to z bezpečnostního hlediska znamená a jste-li ochotni tuto skutečnost akceptovat, můžete se pustit do nastavování. V opačném případě si prostudujte dokumentaci projektu Shibboleth, abyste mohli zhodnotit, zda takovou konfiguraci akceptujete či nikoliv.

Toto nastavení nijak nesouvisí se službami české akademické federace identit eduID.cz. Nastavení zde uvedené je udržováno členy federace.

Sdružení CESNET jakožto operátor a provozovatel federace eduID.cz za toto nastavení nenese žádnou zodpovědnost.

Vše na co jste se báli zeptat, a co musíte udělat, předtím než se pustíte do nastavování SSO s pomocí Shibbolethu. A to v jednom souboru :-)

G Suite for Education: Deployment Guide https://docs.google.com/document/d/1ixVHcT85nhaU8yYUzi4SEaEMocqkRSSC_Y5GpUtUCVI/edit

Shibboleth IdP3

Metadata

# Úpravy konfiguračního souboru metadata-providers.xml
vim /opt/shibboleth-idp/conf/metadata-providers.xml
<!-- Google Metadata -->
<MetadataProvider
    id="GoogleMD" 
    xsi:type="FilesystemMetadataProvider"
    metadataFile="/opt/shibboleth-idp/metadata/google-metadata.xml"
    requireValidMetadata="false" />
# Vytvoření konfiguračního souboru google-metadata.xml
vim /opt/shibboleth-idp/metadata/google-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:emailAddress</NameIDFormat>
        <AssertionConsumerService index="1" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
        Location="https://www.google.com/a/VaseDomena/acs" />
    </SPSSODescriptor>
</EntityDescriptor>

relying-party.xml

# Úpravy konfiguračního souboru relying-party.xml
vim /opt/shibboleth-idp/conf/relying-party.xml
<bean parent="RelyingPartyByName" c:relyingPartyIds="google.com">
    <property name="profileConfigurations">
       <list>
           <bean parent="SAML2.SSO" p:encryptAssertions="false" p:encryptNameIDs="false" />
       </list>
    </property>
</bean>

Celý soubor relying-party.xml je k náhlédnutí zde

attribute-resolver.xml

Definice atributu - v našem případě jsme zvolili id Gprincipal (simple attribute definition) bez použití attribute encoder - dle vzoru z http://shibboleth.1660669.n2.nabble.com/Google-Apps-with-IdPv3-td7612963.html. Nezapomeňte nastavit sourceAttributeID podle vašich potřeb!

# Úpravy konfiguračního souboru attribute-resolver.xml
vim /opt/shibboleth-idp/conf/attribute-resolver.xml
<!-- Google -->
<AttributeDefinition id="Gprincipal" xsi:type="Simple">
    <InputDataConnector ref="myLDAP" attributeNames="AtributVeVasemLDAPuSPrihlasovacimJmenem"/>
</AttributeDefinition>

saml-nameid.xml

Úpravy souboru saml-nameid.xml resp. vložení bean do SAML 2 NameID Generation

# Úpravy konfiguračního souboru saml-nameid.xml
vim /opt/shibboleth-idp/conf/saml-nameid.xml
<!-- -B- 20170319 from http://shibboleth.1660669.n2.nabble.com/Idp3-GAFE-td7626028.html -->
<bean parent="shibboleth.SAML2AttributeSourcedGenerator"
    p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
    p:attributeSourceIds="#{ {'Gprincipal'} }" >
    <property name="activationCondition" >
         <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidate="google.com" />
    </property>
</bean>

Celý soubor saml-nameid.xml je k náhlédnutí zde

attribute-filter.xml

Je třeba posílat pouze Gprincipal, proto je nutné všechny ostatní atributy odfiltrovat, zde najdete pouze návrh jak to lze udělat. (Toto platí pouze za předpokladu, že posíláte vybrané atributy všem). Pokud budete posílat více atributů než Gprincipal, nepůjde se přihlásit!

# Úpravy konfiguračního souboru attribute-filter.xml
vim /opt/shibboleth-idp/conf/attribute-filter.xml
<!-- google -->
    <AttributeFilterPolicy id="releaseGoogle">
        <PolicyRequirementRule xsi:type="Requester" value="google.com" />
 
        <!-- 20141110 -B- problem s commonName -->
        <AttributeRule attributeID="commonName">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
        <AttributeRule attributeID="eduPersonUniqueId">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
        <AttributeRule attributeID="eduPersonPrincipalName">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
        <AttributeRule attributeID="unstructuredName">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
        <AttributeRule attributeID="eduPersonScopedAffiliation">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
        <AttributeRule attributeID="eduPersonTargetedID">
            <DenyValueRule xsi:type="ANY"/>
        </AttributeRule>
 
        <AttributeRule attributeID="Gprincipal">
            <PermitValueRule xsi:type="ANY" />
        </AttributeRule>
    </AttributeFilterPolicy>

idp.properties

Tady opravdu nevím - doporučení dle https://community.servicenow.com/thread/232967 je použít hodnotu true, tuto jsem nastavil a přihlašování začalo fungovat, nicméně jsem řádek opět zakomentoval a vše dále bez problémů (i přes restart serveru) funguje.

# Úpravy konfiguračního souboru idp.properties
vim /opt/shibboleth-idp/conf/idp.properties
### -B- 20170318 kvuli GoogleApps
# ref: https://community.servicenow.com/thread/232967
# idp.encryption.optional = true

GoogleSync

Pokud používate vlastní CA, nebo CA která není v KeyStore (pozor GoogleSync používá vlastní!) najdete řešením na těchto stránkách https://support.google.com/a/answer/3075991?hl=en

Možné problémy a řešení