Generowanie eduPersonTargetedID

Z PIONIER.Id
Przejdź do nawigacji Przejdź do wyszukiwania

Atrybut eduPersonTargetedID

Jest to atrybut "anonimowy", nie zdradzający tożsamości użytkownika. Jednocześnie jego wartość jest unikatowa dla danego użytkownika oraz kombinacji IdP i SP, żaden użytkownik nie może otrzymać tej samej wartości atrybutu w komunikacji między danym SP i danym IdP. Atrybut został zdefiniowany w specyfikacji eduPerson ([http:https://www.internet2.edu/media/medialibrary/2013/09/04/internet2-mace-dir-eduperson-201203.html eduPerson Object Class Specification (201203)], a jego syntaks ma postać atrybutu SAML.

Dzięki atrybutowi eduPersonTargetedID dostawca usługi może rozpoznawać tego samego użytkownika w kolejnych sesjach, bez znajomości jego danych, realizować personalizację usługi, przechowywać profil użytkownika, śledzić aktywność itp.

Shibboleth IdP

IdP tworzy atrybut eduPersonTargetedID dla danego użytkownika oraz usługi (SP) przy użyciu konektora danych (element <resolver:DataConnector xsi:type="StoredId">). Z kolei postać atrybutu opisuje element <resolver:AttributeDefinition xsi:type="ad:SAML2NameID" id="eduPersonTargetedID">. Wszystko jest zdefiniowane w pliku attribute-resolver.xml.

W elemencie <resolver:DataConnector> jest definiowana liczba losowa używana do generowania wartości (salt) oraz atrybut źródłowy (sourceAttributeID).

Działanie konektora StoreID przebiega następująco:

  • jeśli dla danego użytkownika i usługi (SP) została już wyliczona i zapamiętana w bazie danych wartość trwałego identyfikatora, to jest ona pobierana i przekazywana jako wartość atrybutu eduPersonTargetedID
  • jeśli w bazie powiązanej z konektorem nie ma gotowej wartości, jest ona wyliczana i zapisywana do bazy, a następnie przekazywana jako wartość atrybutu eduPersonTargetedID.

Atrybut eduPersonTargetedID musi zostać udostępniony aplikacji - odpowiedzialne za to są ustawienia w plikuattribute-filter.xml, konkretnie:

   <afp:AttributeFilterPolicy id="releaseEPTIdToAnyone">
      <afp:PolicyRequirementRule xsi:type="basic:ANY"/>
        <afp:AttributeRule attributeID="eduPersonTargetedID">
          <afp:PermitValueRule xsi:type="basic:ANY" />
        </afp:AttributeRule>
    </afp:AttributeFilterPolicy>

Szczegółowy opis dotyczący obsługi atrybutu eduPersonTargetedID znajduje się tutaj.

SimpleSAMLphp IdP

Wygenerowanie eduPersonTargetedID jest realizowane przez filtr o nazwie core:TargetedID. Filtr ten używa do wyliczenia wartości eduPersonTargetedID wskazanego identyfikatora użytkownika. Domyślny atrybut zawierający ten identyfikator to eduPersonPrincipalName. Można wskazać w konfiguracji dowolny inny atrybut użytkowy, służy do tego parametr userid.attribute w konfiguracji metadata/saml20-idp-hosted.php, np.

userid.attribute: uid

Można również podać parametr 'attributename' w definicji filtra core:TargetedID, np.

'authproc' => array(
 30 => array(
       'class' => 'core:TargetedID',
       'attributename' => 'uid',
 ),
)

Do wyliczenia wartości atrybutu służy następująca formuła:

sha1( 
   'uidhashbase' + $secretSalt + 
    strlen($idpEntityid) + ':' + $idpEntityid + 
    strlen($spEntityid) + ':' + $spEntityid + 
    strlen($userID) + ':' + $userID + 
    $secretSalt
)
  • $secretSalt to liczba losowa ustalona w instalacji IdP
  • $idpEntityid to nazwa umieszczona jako entityID w metadanych encji pełniącej funkcję IdP
  • $spEntityid to nazwa umieszczona jako entityID w metadanych encji pełniącej funkcję SP
  • $userID to zadeklarowany identyfikator użytkownika pobrany z bazy lub domyślnie wartość eduPersonPrincipalName

Atrybut eduPersonTargetedID może być prezentowany w postaci NameID:


<saml2:AttributeValue>
    <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
       NameQualifier="https://idp.example.org/shibboleth"
       SPNameQualifier="https://sp.example.org/shibboleth">
       1234567890
    </saml2:NameID>
</saml2:AttributeValue>

Aby SimpleSAMLphp generował taką postać atrybutu, trzeba dodać opcję nameID=true w w definicji filtra core:TargetedID:


'authproc' => array(

 30 => array(
       'class' => 'core:TargetedID',
       'attributename' => 'uid',
       'nameId' => TRUE,
 ),

)


Trzeba wówczas również dodać do konfiguracji metadata/saml20-idp-hosted.php parametr attributeencodings, by wymusić prezentację wartości w postaci "surowej". Ponieważ w zależności od tego w jakiej fazie następuje zamiana nazwy atrybutu na postać OID - zależy to od priorytetów ustawionych w filtrach, najbezpieczniej jest zadeklarować stosowanie tego typu kodowania dla atrybutu eduPersonPrincipalName oraz urn:oid:1.3.6.1.4.1.5923.1.1.1.10:

'attributeencodings' => array(
       'eduPersonTargetedID' => 'raw',
       'urn:oid:1.3.6.1.4.1.5923.1.1.1.10' => 'raw'
),