cs:tech:idp:shibboleth:google

Toto je starší verze dokumentu!


Integrace se službami Google

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" sourceAttributeID="AtributVeVasemLDAPuSPrihlasovacimJmenem">
    <Dependency ref="myLDAP" />
</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

  • LDAP Configuration → Authorized User musí obsahovat kompletní dn účtu
  • pri importu neumí sám vytvořit OrgUnit
    • OrgUnit „example.cz“ odpovídá '/' → pravidlo '/IMPORT' umístí uživatele to example.cz → IMPORT
    • '/' funguje jako oddelovac → pravidlo '/IMPORT/X' umístí uživatele do example.cz → IMPORT → X
  • pravidla pro ignorování účtů na straně GC při synchronizaci: Google Domain Configuration → Exclusion rules
    • pokus o import uživatele, který existuje a přitom je vyloučen některým z pravidel skončí chybou.

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í

  • Implicitně jsme měli povoleno pouze 2000 účtů, bylo třeba kontaktovat Google pomocí Admin → Support a počet účtů nám byl bez problému okamžitě navýšen.
  • Vyskytl se problém s Classroom. Zakládat třídy bylo povoleno pouze pedagogům, ti se musí přidat do skupiny teachers@tul.cz (která byla založena automaticky při povolení služby). Bohužel ne vždy to fungovalo. Po zakázání a znovou povolení služby Classroom, se vytvořila odlišná skupina ucitele_ucebny@tul.cz. I zde nešli přidávat uživatelé. Problém byl způsoben tím, že Groups for Business (Apps → G Suite) bylo povoleno pouze pro část organizace!
  • Pokud není povolen Gmail, je také třeba zakázal Hangout
  • Problémem je odhlášení, G Suite nepodporuje globální odhlášení od IdP. Je třeba otestovat!
Poslední úprava:: 2017/06/06 10:46