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
# Ú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>
# Ú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
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>
Ú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
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>
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
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
CESNET, z. s. p. o.
Generála Píky 26
16000 Praha 6
info@cesnet.cz
Tel: +420 234 680 222
GSM: +420 602 252 531
support@cesnet.cz