===== Attr Filter =====
===== Reference =====
* https://wiki.shibboleth.net/confluence/display/SHIB2/IdPAddAttributeFilter
===== EduPersonEntitlement =====
==== references ====
* https://services.renater.fr/federation/docs/fiches/entitlement
* https://wiki.shibboleth.net/confluence/display/SHIB2/ResolverScriptAttributeDefinition
==== Indications constructions d'attributs ====
=== resolver script ===
exemple de script de provisioning de l'attribut eduPersonEntitlement servant à déterminer l'acces d'un invidu à differentes ressources.
ici nous nous basons sur 3 attributs de l'annuaire
* schacUserStatus
* email
* eduPersonPrimaryOrgUnitDN
permettant respectivement de déterminer les droits applicatifs (schacUserStatus => multivalué, d'où la boucle "for ..." dans le script ci-dessous), l'identité personnelle basée sur le mail et l'appartenance à un structure organisationnelle.
/opt/shibboleth-idp/conf/attribute-resolver.xml
=== Filter Rules ===
Les règles de filtrage permettent de définir suivant la ressource accédée (SP), quelles valeurs de l'attribut eduPersonEntitlement nous allons lui fournir.
a titre d'exemple ici:
La première règle (AttributeFilterPolicy id="releaseEPeToMinesTelecom") envoie aux SP de la fédé Mines-Telecom (groupID) les valeurs de l'attribut eduPersonEntitlement
* value="urn:mace:it-sudparis.eu:it:personal-conges"
* value="urn:mace:it-sudparis.eu:it:personal-webspace"
* value="urn:mace:it-sudparis.eu:it:struc-dsi-user"
Le 2eme (AttributeFilterPolicy id="releaseEPeToTCS") envoie au SP TCS de certif personnels et au SP www-public explicitements les valeurs de ce meme attribut les concernants plus spécifiquement:
* value="urn:mace:terena.org:tcs:personal-user"
* value="urn:mace:terena.org:tcs:personal-admin"
==== attribut entitlement UPSay ====
attribute filter
==== Attribut appartenance IT/DSI ====
Dans le cadre d'echanges intra communautaires, il peut etre souhaitable de distinguer par exemple les personnels faisant partie d'une DSI (ou autres services) afin de definir des autorisations de lecture et/ou ecriture granulaires par categorie de personnes.
ainsi nous allons prendre l'exemple ci-dessous de contruction d'un attribut maison "depIT" (pour l'exemple) permettant d'aller chercher l'information d'appartenance d'une personne à une DSI dans le referentiel local et de pousser cet attribut dans la reponse de l'IDP au SP , permettant à ce dernier un conrole d'acces fin sur l'appartenance d'un utilisateur une DSI.
Dans cet exemple nous basons la contruction de cet attribut maison sur l'attribut departmentNumber de notre referentiel local où un personnel de la DSI peut contenir plusieurs valeurs dans departmentNumber(DISI, et sous groupes fonctionnels: SRI, SI, SIA), on retournera pour tous la valeur "DSI".
Configuration dans le fichier de l'IDP: attribute-resolver.xml
IT
DSI
SIA
DISI
SRI
SI
==== Controle d'acces Apache ====
il est possible au niveau du ServiceProvider de filter l'acces a une ressource sur la base d'expressions regulieres .
cf https://spaces.internet2.edu/display/SHIB2/NativeSPhtaccess
exemple:
...
require entitlement ~ ^.+:struc-dsi-user
ce qui donnera un acces au cas ou la valeur d'attribut d'EduPersonEntitlement match l'expression régulière, exemple de log du module shib (native.log)
2011-03-09 19:41:00 DEBUG Shibboleth.Apache [16794] shib_auth_checker: htaccess: expecting regexp ^.+:struc-dsi-user, got urn:mace:it-sudparis.eu:it:struc-dsi-user: acccepted
2011-03-09 19:41:00 DEBUG Shibboleth.Apache [16794] shib_auth_checker: htaccess: a rule was successful, granting access
==== Exemples d'acces ====
=== Ressource fédé mines-telecom ===
* SP appartenant au groupID "mines-telecom"
http://infopedia.it-sudparis.eu/test/shib/shibtest.php
entitlement
* urn:mace:it-sudparis.eu:it:personal-webspace
* urn:mace:it-sudparis.eu:it:personal-conges
* urn:mace:it-sudparis.eu:it:struc-dsi-user
* SP appartenant à la fédé "Renater/TCS ..."
http://www-public.it-sudparis.eu/test/shib/shibtest.php
entitlement
* urn:mace:terena.org:tcs:personal-user
* urn:mace:terena.org:tcs:personal-admin
*
*
*
*
=== Debug Log IDP ===
on vois bien dans le reponse de l'IDP, quand on accede au SP de TCS, qu'il filtre les bonnes valeurs:
$ tail -f /opt/shibboleth-idp/logs/idp-process.log | grep -i edupersonentitlement
17:39:21.459 - DEBUG [edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.ShibbolethAttributeResolver:316] - Resolved attribute eduPersonEntitlement containing 5 values
17:39:21.477 - DEBUG [edu.internet2.middleware.shibboleth.common.attribute.filtering.provider.ShibbolethAttributeFilteringEngine:156] - Processing permit value rule for attribute eduPersonEntitlement for principal procacci
17:39:21.477 - TRACE [edu.internet2.middleware.shibboleth.common.attribute.filtering.provider.ShibbolethAttributeFilteringEngine:168] - The following value for attribute eduPersonEntitlement does not meet permit value rule: urn:mace:it-sudparis.eu:it:personal-webspace
17:39:21.477 - TRACE [edu.internet2.middleware.shibboleth.common.attribute.filtering.provider.ShibbolethAttributeFilteringEngine:168] - The following value for attribute eduPersonEntitlement does not meet permit value rule: urn:mace:it-sudparis.eu:it:personal-conges
17:39:21.477 - TRACE [edu.internet2.middleware.shibboleth.common.attribute.filtering.provider.ShibbolethAttributeFilteringEngine:168] - The following value for attribute eduPersonEntitlement does not meet permit value rule: urn:mace:it-sudparis.eu:it:struc-dsi-user
==== Debug Mailing list ====
Messages utiles
* http://shibboleth.1660669.n2.nabble.com/Accessing-a-SP-Entity-ID-into-a-Script-td3277300.html
* https://lists.internet2.edu/sympa/arc/shibboleth-users/2011-01/msg00535.html
* https://lists.internet2.edu/sympa/arc/shibboleth-users/2011-02/msg00020.html
*
===== PrincipalName pour google =====
==== references ====
* http://code.google.com/intl/fr/apis/apps/articles/shibboleth2.0.html#configuringgoogleapps
* https://spaces.internet2.edu/display/SHIB/NameIdentifier
* https://spaces.internet2.edu/display/SHIB2/ResolverPrincipalNameDefinition
* https://spaces.internet2.edu/display/SHIB2/NativeSPAttributeDecoder#NativeSPAttributeDecoder-NameIDAttributeDecoder
* https://spaces.internet2.edu/display/SHIB2/NameIDAttributes
* https://spaces.internet2.edu/display/SHIB2/IdPNameIdentifier
==== Indications Mines-Telecom ====
==== Google Metadata ====
Ajout des metadata google sur notre IdP pour le SP de notre site/domain google (ici tmsp.mines-telecom.fr)
[root@shibidp1 /opt/shibboleth-idp/conf]
$ cat ../metadata/google-metadata.xml
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
==== RelyingParty google ====
specification du profile SSO et referencement aux metadata google créé ci-dessus
[root@shibidp1 /opt/shibboleth-idp/conf]
$ vim relying-party.xml
...
....
=== SSO shibboleth ===
Attention, l'exemple ci-dessus est valable pour un IdP qui authentifie sur la base d'un SSO externe a shibboleth , délégation à CAS via un filtre java en frontal de l'URL /Authn/RemoteUser.
Si c'est le SSO shibboleth via le login handler UsernamePassword ; handler.xml :
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
il faut alors preciser dans le relying partY concernant google, le defaultAuthenticationMethod a PasswordProtectedTransport ( constat fait sur un site qui n'utilise pas CAS mais le SSO integré a shibboleth ).
==== resolver script ====
Définition d'un attribut "principal" basé sur le NameId avec un encodage de type SAML2StringNameID pour le SP google.
Pour le SP de test https://www-public.it-sudparis.eu, encodage de type SAML1StringNameIdentifier (2eme
==== Filtre ====
Pour les SP google.com et notre SP de test (https://www-public.it-sudparis.eu) nous permettons toutes valeur (ANY) de l'attribut "principal" . Commenté dans le code ci-dessous, on retrouve un exemple du retrait du transientId => nameId (opaque) par défaut !.
==== Decoder sur le SP ====
Pour tester le resultat coté SP, l'attributeViewer sur http://www-public.it-sudparis.eu/test/shib/shibtest.php permet de visualiser le resultat de notre envoie de "principal" .
Pour ce faire ce SP doit creer un attribute-map pour cet attribut.
[root@wpublic /etc/shibboleth]
$ vim attribute-map.xml
...
==== Debug ====
Ceci a été réalisé grace a un long thread avec les developpeurs shibboleth:
* https://lists.internet2.edu/sympa/arc/shibboleth-users/2011-03/msg00302.html