Jestliže Váš LDAP/AD server neobsahuje atribut cn obsahující celé jméno bez titulů včetně diakritiky, tedy křestní jméno a příjmení (jak je uvedeno v požadavcích na atributy v eduID.cz), můžete tento atribut jednoduše složit z křestního jména (givenName) a příjmení (sn).
Následující blok kódu z konfiguračního souboru 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ší.
<!-- cn (givenName + sn) --> <AttributeDefinition xsi:type="Template" id="cn"> <InputAttributeDefinition ref="givenName"/> <InputAttributeDefinition ref="sn"/> <Template>${givenName} ${sn}</Template> </AttributeDefinition>
Následně je třeba ještě povolit uvolňování výše definovaného atributu v konfiguračním souboru conf/attribute-filter.xml. Např. pro uvolňování cn
v rámci federace eduID.cz dle groupID by to vypadalo takto:
<!-- eduID.cz federation --> <AttributeFilterPolicy id="eduidcz"> <!-- Restriction by group --> <PolicyRequirementRule xsi:type="InEntityGroup" groupID="https://eduid.cz/metadata"/> <AttributeRule attributeID="cn" permitAny="true"/> </AttributeFilterPolicy>
Teď je potřeba restartovat AttributeResolverService
a AttributeFilterService
anebo rovnou Jetty:
# Restart AttributeResolverService a AttributeFilterService cd /opt/shibboleth-idp/ ./bin/reload-service.sh -id shibboleth.AttributeResolverService ./bin/reload-service.sh -id shibboleth.AttributeFilterService # Případně restart Jetty systemctl restart jetty9
Atribut commonNameASCII je vyžadován službou TCS pro vydávání osobních certifikátů.
Pokud takový atribut nemáte v LDAP/AD serveru, můžete si ho v Shibboleth IdP snadno složit. K jeho generování v následující ukázce s výhodou využijeme výše definovaného atributu cn, který jsme složili z křestního jména givenName a příjmení sn.
Definice atributu commonNameASCII v konfiguračním souboru conf/attribute-resolver.xml vypadá následovně (skript předpokládá, že jméno a příjmení včetně diakritiky je v atributu 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ší.
<!-- commonNameASCII --> <AttributeDefinition xsi:type="ScriptedAttribute" id="commonNameASCII"> <InputAttributeDefinition ref="cn"/> <DisplayName xml:lang="cs">Celé jméno bez diakritiky</DisplayName> <DisplayName xml:lang="en">Full name without diacritics</DisplayName> <AttributeEncoder xsi:type="SAML2String" name="http://eduid.cz/attributes/commonName#ASCII" friendlyName="commonNameASCII"/> <Script> <![CDATA[ load("nashorn:mozilla_compat.js"); importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider); importPackage(Packages.java.lang); importPackage(Packages.java.text); if(cn.getValues().size() > 0) { originalValue = cn.getValues().get(0); asciiValue = Normalizer.normalize(originalValue, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); commonNameASCII.getValues().add(asciiValue); } ]]> </Script> </AttributeDefinition>
Nyní zbývá tento atribut ještě uvolňovat. Pro jeho uvolňování službám ve federaci eduID.cz, tedy včetně portálu pro osobní TCS certifikáty, můžeme použít následující groupID pravidlo do konfiguračního souboru conf/attribute-filter.xml:
<!-- eduID.cz federation --> <AttributeFilterPolicy id="eduidcz"> <!-- Restriction by group --> <PolicyRequirementRule xsi:type="InEntityGroup" groupID="https://eduid.cz/metadata"/> <AttributeRule attributeID="commonNameASCII" permitAny="true"/> </AttributeFilterPolicy>
Zbývá jen restartovat AttributeResolverService
a AttributeFilterService
anebo rovnou Jetty:
# Restart AttributeResolverService a AttributeFilterService cd /opt/shibboleth-idp/ ./bin/reload-service.sh -id shibboleth.AttributeResolverService ./bin/reload-service.sh -id shibboleth.AttributeFilterService # Případně restart Jetty systemctl restart jetty9
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ím souboru /opt/shibboleth-idp/conf/idp.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:
idp.session.timeout = PT12H idp.session.defaultSPlifetime = PT12H idp.authn.defaultLifetime = PT12H idp.authn.defaultTimeout = PT12H
Restartujeme Jetty:
# Restart Jetty
systemctl restart jetty9
Chcete-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ůžete toho dosáhnout v konfiguračním souboru conf/intercept/consent-intercept-config.xml
od řádku 71. Element <util:list id=„shibboleth.consent.attribute-release.AttributeDisplayOrder“>
musíte nejprve odkomentovat.
Následující kód způsobí, že atributy v uApprove budou seřazeny následovně (odshora dolů): givenName, sn, cn, commonNameASCII, displayName, telephoneNumber, authMail, mail, eduPersonPrincipalName, unstructuredName, eduPersonUniqueId, o, ou, schacHomeOrganization.
<util:list id="shibboleth.consent.attribute-release.AttributeDisplayOrder"> <value>givenName</value> <value>sn</value> <value>cn</value> <value>commonNameASCII</value> <value>displayName</value> <value>telephoneNumber</value> <value>authMail</value> <value>mail</value> <value>eduPersonPrincipalName</value> <value>unstructuredName</value> <value>eduPersonUniqueId</value> <value>o</value> <value>ou</value> <value>schacHomeOrganization</value> </util:list>
Restartujeme Jetty:
# Restart Jetty
systemctl restart jetty9
Některé atributy je vhodné v uApprove uživatelům nezobrazovat, jelikož jejich hodnoty mohou 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čuji schovávat i eduPersonEntitlement
.
Nastavení se provádí v conf/intercept/consent-intercept-config.xml
v elementu <util:list id=„shibboleth.consent.attribute-release.BlacklistedAttributeIDs“>
.
<util:list id="shibboleth.consent.attribute-release.BlacklistedAttributeIDs"> <value>transientId</value> <value>persistentId</value> <value>eduPersonTargetedID</value> <value>eduPersonEntitlement</value> </util:list>
Teď je potřeba restartovat Jetty:
# Restart Jetty
systemctl restart jetty9
Pokud chcete vypnout tzv. uApprove – vlastnost, 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 provést úpravu v konfiguračním souboru /opt/shibboleth-idp/conf/relying-party.xml
.
Na řádku 43 je potřeba odstranit XML atribut p:postAuthenticationFlows=„attribute-release“
, čili
<bean parent="SAML2.SSO" p:postAuthenticationFlows="attribute-release" />
změnit na
<bean parent="SAML2.SSO" />
Pak musíme restartovat Jetty:
# Restart Jetty
systemctl restart jetty9
CESNET, z. s. p. o.
Zikova 4, 16000 Praha 6
info@cesnet.cz
Tel: +420 234 680 222
GSM: +420 602 252 531
support@cesnet.cz