====== 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ší.** 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