This is an old revision of the document!
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
permettant respectivement de déterminer les droits applicatifs (schacUserStatus), l'identité personnelle basée sur le mail et l'appartenance à un structure organisationnelle.
/opt/shibboleth-idp/conf/attribute-resolver.xml
<!-- eduPersonEntitlement -->
<resolver:AttributeDefinition id="eduPersonEntitlement" xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" >
<resolver:Dependency ref="ldapTMSP" />
<resolver:Dependency ref="schacUserStatus" />
<resolver:Dependency ref="email" />
<resolver:Dependency ref="eduPersonPrimaryOrgUnitDN" />
<resolver:AttributeEncoder xsi:type="SAML1String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:mace:dir:attribute-def:eduPersonEntitlement" />
<resolver:AttributeEncoder xsi:type="SAML2String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" friendlyName="entitlement" />
<Script>
<![CDATA[
importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);
eduPersonEntitlement = new BasicAttribute("eduPersonEntitlement");
if (schacUserStatus != null && email != null ) {
for ( i = 0; schacUserStatus != null && i < schacUserStatus.getValues().size(); i++ ){
value = schacUserStatus.getValues().get(i);
if (schacUserStatus.getValues().get(i).matches(".*cert.*")) {
eduPersonEntitlement.getValues().add("urn:mace:terena.org:tcs:personal-user");
}//if
else if (schacUserStatus.getValues().get(i).matches(".*conge.*")) {
eduPersonEntitlement.getValues().add("urn:mace:it-sudparis.eu:it:personal-conges");
}//if
else if (schacUserStatus.getValues().get(i).matches(".*wpublic.*")) {
eduPersonEntitlement.getValues().add("urn:mace:it-sudparis.eu:it:personal-webspace");
}//if
}
if (email.getValues().get(0).match("^Prenom1.Nom1@it-sudparis.eu$")) {
eduPersonEntitlement.getValues().add("urn:mace:terena.org:tcs:personal-admin");
}//if
if (email.getValues().get(0).match("^Prenom2.Nom2@it-sudparis.eu$")) {
eduPersonEntitlement.getValues().add("urn:mace:terena.org:tcs:personal-admin");
}//if
}//IF
if (eduPersonPrimaryOrgUnitDN != null ) {
if (eduPersonPrimaryOrgUnitDN.getValues().get(0).match(".*DISI.*")) {
eduPersonEntitlement.getValues().add("urn:mace:it-sudparis.eu:it:dsi-user");
}//if
}
else eduPersonEntitlement.getValues().add("");
]]>
</Script>
</resolver:AttributeDefinition>
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.
<!-- Release eduPersonEntitlement and it's associated permissible values
to SP that is a member of FedeIT or Fede Mines -->
<AttributeFilterPolicy id="releaseEPeToMinesTelecom">
<PolicyRequirementRule xsi:type="basic:OR">
<basic:Rule xsi:type="saml:AttributeRequesterInEntityGroup" groupID="https://federation.institut-telecom.fr/" />
<basic:Rule xsi:type="saml:AttributeRequesterInEntityGroup" groupID="http://www.mines-nantes.fr/" />
</PolicyRequirementRule>
<AttributeRule attributeID="eduPersonEntitlement">
<PermitValueRule xsi:type="basic:OR">
<basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:it-sudparis.eu:it:personal-conges" ignoreCase="true" />
<basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:it-sudparis.eu:it:personal-webspace" ignoreCase="true" />
<basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:it-sudparis.eu:it:struc-dsi-user" ignoreCase="true" />
</PermitValueRule>
</AttributeRule>
</AttributeFilterPolicy>
<!--Release eduPersonEntitlement and it's associated permissible values
to 2 SP; TCS and wpublic -->
<AttributeFilterPolicy id="releaseEPeToTCS">
<PolicyRequirementRule xsi:type="basic:OR">
<basic:Rule xsi:type="basic:AttributeRequesterString" value="https://tcs-personal-portal.terena.org/simplesamlphp/module.php/saml/sp/metadata.php/default-sp" />
<basic:Rule xsi:type="basic:AttributeRequesterString" value="https://www-public.it-sudparis.eu" />
</PolicyRequirementRule>
<AttributeRule attributeID="eduPersonEntitlement">
<PermitValueRule xsi:type="basic:OR">
<basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:terena.org:tcs:personal-user" ignoreCase="true" />
<basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:terena.org:tcs:personal-admin" ignoreCase="true" />
</PermitValueRule>
</AttributeRule>
</AttributeFilterPolicy>
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
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:
http://infopedia.it-sudparis.eu/test/shib/shibtest.php
entitlement
* SP appartenant à la fédé “Renater/TCS …”
http://www-public.it-sudparis.eu/test/shib/shibtest.php
entitlement
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