====== Pokročilá konfigurace Shibboleth IdP ======
===== Složení atributu "cn" z "givenName" a "sn" =====
Jestliže náš LDAP/AD server neobsahuje atribut [[..:..:attributes:cn]] obsahující //celé jméno bez titulů včetně diakritiky, tedy křestní jméno a příjmení// (jak je uvedeno v [[https://www.eduid.cz/cs/tech/attributes|požadavcích na atributy v eduID.cz]]), můžeme tento atribut jednoduše složit z křestního jména ([[..:..:attributes:givenname]]) a příjmení ([[..:..:attributes:sn]]).
Následující blok kódu z konfiguračního souboru [[https://www.eduid.cz/shibboleth-idp/attribute-resolver.xml|conf/attribute-resolver.xml]] předpokládá:
* ''myLDAP'' je identifikátor konektoru do LDAP/AD serveru,
* ''givenName'' je název atributu obsahující křesní jméno uživatele (včetně diakritiky),
* ''sn'' je název atributu obsahující příjmení uživatele (včetně diakritiky).
**Následující kód předpokládá, že máte Shibboleth IdP verze 4.0.0 a novější.**
${givenName} ${sn}
Teď je potřeba restartovat ''AttributeResolverService'':
# Restart AttributeResolverService
/opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.AttributeResolverService
===== commonNameASCII =====
Atribut [[cs:tech:attributes:commonnameascii]] je vyžadován službou [[https://pki.cesnet.cz/cs/tcs-admin-root.html|TCS]] pro vydávání [[https://pki.cesnet.cz/cs/tcs-personal.html|osobních]] certifikátů.
Pokud takový atribut nemáme v LDAP/AD serveru, můžeme si ho v Shibboleth IdP snadno vyrobit. K jeho generování v následující ukázce s výhodou využijeme výše definovaného atributu [[#slozeni_atributu_cn_z_givenname_a_sn|cn]], který jsme složili z křestního jména [[..:..:attributes:givenname]] a příjmení [[..:..:attributes:sn]].
Definice atributu [[..:..:attributes:commonnameascii]] v konfiguračním souboru [[https://www.eduid.cz/shibboleth-idp/conf/attribute-resolver.xml|conf/attribute-resolver.xml]] vypadá následovně (skript předpokládá, že jméno a příjmení včetně diakritiky je v atributu [[..:..:attributes:cn]], přesně jako je to uvedeno výše):
**Následující kód předpokládá, že máte Shibboleth IdP verze 4.0.0 a novější.**
Zbývá jen restartovat ''AttributeResolverService'':
# Restart AttributeResolverService
/opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.AttributeResolverService
===== Prodloužení doby platnosti přihlášení =====
Výchozí nastavení Shibboleth IdP způsobuje, že se uživatelé musí každou hodinu přihlašovat ke službám z důvodu vypršení platnosti přihlášení (sezení, session, ...). Úpravou v konfiguračních souborech ''/opt/shibboleth-idp/conf/idp.properties'' a ''/opt/shibboleth-idp/conf/authn/authn.properties'' lze dobu platnosti přihlášení prodloužit.
Následující konfigurace způsobí, že se uživatelé musí znovu přihlásit až po uplynutí 12 hodin:
# conf/idp.properties
idp.session.timeout = PT12H
idp.session.defaultSPlifetime = PT12H
# conf/authn/authn.properties
idp.authn.defaultLifetime = PT12H
idp.authn.defaultTimeout = PT12H
Restartujeme Jetty:
# Restart Jetty
systemctl restart jetty9
===== Consent (uApprove) =====
==== Zapnutí ====
Pokud chceme zapnout tzv. "consent" neboli uApprove -- funkci, která po úspěšném přihlášení uživatele zobrazí seznam uživatelských atributů a jejich hodnot, které budou službě uvolněny -- je potřeba zapnout modul ''idp.intercept.Consent'' a provést úpravu v konfiguračním souboru ''/opt/shibboleth-idp/conf/relying-party.xml''.
Zapnutí modulu:
# Zapnutí modulu idp.intercept.Consent
/opt/shibboleth-idp/bin/module.sh -e idp.intercept.Consent
Na řádku 40 je potřeba doplnit XML atribut ''p:postAuthenticationFlows="attribute-release"'', čili
Pak je nutné restartovat Jetty:
# Restart Jetty
systemctl restart jetty9
==== Seřazení atributů ====
Chceme-li, aby se v uApprove při potvrzování uvolňovaných atributů, zobrazovaly atributy v nějakém specifickém pořadí tak, aby byl přehled pro uživatele snáze srozumitelný, můžeme toho dosáhnout v konfiguračním souboru ''conf/intercept/consent-intercept-config.xml''. Element '''' musíme nejprve odkomentovat.
Následující kód způsobí, že atributy v uApprove budou seřazeny následovně (odshora dolů): [[..:..:attributes:givenname]], [[..:..:attributes:sn]], [[..:..:attributes:cn]], [[..:..:attributes:commonnameascii]], [[..:..:attributes:displayname]], [[..:..:attributes:telephonenumber]], [[..:..:attributes:authmail]], [[..:..:attributes:mail]], [[..:..:attributes:edupersonprincipalname]], [[..:..:attributes:unstructuredname]], [[..:..:attributes:edupersonuniqueid]], [[..:..:attributes:o]], [[..:..:attributes:ou]], [[..:..:attributes:schachomeorganization]].
givenName
sn
cn
commonNameASCII
displayName
telephoneNumber
authMail
mail
eduPersonPrincipalName
unstructuredName
eduPersonUniqueId
o
ou
schacHomeOrganization
Restartujeme Jetty:
# Restart Jetty
systemctl restart jetty9
==== Schování atributů ====
Některé atributy je vhodné v uApprove uživatelům nezobrazovat, jelikož jejich obsah může nabývat dosti matoucích hodnot. Mezi tyto atributy, které se ve výchozím nastavení v uApprove nezobrazují, patří ''transientId'', ''persistentId'' a ''eduPersonTargetedID''. Osobně doporučujeme schovávat i ''eduPersonEntitlement''.
Nastavení se provádí v ''conf/intercept/consent-intercept-config.xml'' v elementu ''''.
transientId
persistentId
eduPersonTargetedID
eduPersonEntitlement
Teď je potřeba restartovat Jetty:
# Restart Jetty
systemctl restart jetty9
===== Expirace hesla =====
Chceme-li varovat uživatele před expirací hesla, musíme zapnout modul "ExpiringPassword":
# Zapnutí modulu ExpiringPassword
/opt/shibboleth-idp/bin/module.sh -e idp.intercept.ExpiringPassword
Do ''ldap.properties'' doplníme (třeba nakonec souboru) následující volbu:
idp.authn.LDAP.usePasswordExpiration = true
Do ''attribute-resolver.xml'' doplníme atribut //passwordExpiration// a přidáme element ''ReturnAttributes'' do LDAP konektoru:
* passwordExpirationTime
Následně musíme nastavit, jak moc dopředu chceme uživatele před expirací varovat. Shibboleth IdP má standardně nastaveno 14 dní. Doporučujeme ale provést změnu alespoň na 30 dní, změnit tedy //p:offset="-P14D"// na //p:offset="-P30D"//. Ostatní parametry by měly být v pořádku.
Pak ještě zbývá upravit soubor ''relying-party.xml'' a přidat ''expiring-password'' do autentizačního toku pro **SAML2.SSO**:
Zbývá restartovat Jetty:
# Restartování Jetty
systemctl restart jetty9