Attribútum feloldás

A felhasználó azonosítása után az IdP még csak a REMOTE_USER változóban megkapott principal azonosítót tudja. A következő lépésben meg kell határozni a felhasználóhoz kapcsolódó attribútumokat. Ezeket az attribútumokat általában valamilyen adatbázisból (LDAP, SQL) kell lekérdezni, de lehetséges konstans, ill. származtatott attribútumokat is használni.

Fontos megjegyezni, hogy az attribútumok csak akkor adódnak át az SP-knek, ha ez az Attribute Release Policy-ban engedélyezve van. Természetesen fel nem oldott attribútumokat nem lehet átadni.

Az attribútum feloldást az IdP konfiguráció   elemének   attribútumában megadott XML állományban konfigurálhatjuk. Ez általában a   vagy   névre hallgat

Attribútum feloldás menete
Az attribútum feloldás abból áll, hogy attribútum definícióhoz adat(bázis) konnektorokat rendelünk. Az adat konnektor feladata az attribútum értékének meghatározása, pl. külső adatforrásokból. Az attribútum definíció azt adja meg, hogy miként kell az értéket a Shibboleth által használt SAML assertionbe tenni.

Adatok kinyerése (DataConnector)
Minden adatforrás rendelkezik egy id mezővel, amelynek az összes adatforrásra nézve egyedinek kell lennie.

JNDIDirectoryDataConnector
Ennek segítségével állíthatjuk be a JNDI LDAP kapcsolat paramétereit. Ezen az interfészen keresztül tetszőleges LDAP v3 interfészt biztosító adatforrás lekérdezhető.

Példa:


 * Példa beállítások magyarázata (részletes beállítási lehetőségekkel kapcsolatban lásd a Shibboleth Wiki vonatkozó részét!)
 *  : az az LDAP filter, amely alapján a REMOTE_USER értékéből megkereshető a felhasználó LDAP entry-je. Ha összetett szűrő szabályt kell mondani, akkor a & jelet &amp;amp;-vel kell eszképelni.
 *  : az LDAP lekérdezés scope-ja. Lehetséges értékek:
 * ONELEVEL_SCOPE
 * OBJECT_SCOPE (base)
 * SUBTREE_SCOPE
 *  property: LDAP URL, amely a search base DN-jét is tartalmazza
 *  property: itt lehet megadni, hogy SSL-t használjon-e az LDAP kapcsolat kiépítésekor. Ha nem akarunk SSL-t használni, akkor ezt a property-t ne adjuk meg! Lásd még: LDAP kliens SSL
 *  property: az a DN, amellyel a Shibboleth alkalmazás bind-ol az LDAP szerverhez.
 *  property: az előző DN-hez tartozó jelszó

JDBCDataConnector
E konnektor segítségével tetszőleges JDBC-n keresztül elérhető adatforrásból kinyerhetünk adatokat.

A "?" karakterrel hivatkozhatunk a REMOTE_USER változóban kapott principal azonosítóra.

A  részletes paraméterezhetőségéről lásd a Shibboleth wiki vonatkozó részét!

StaticDataConnector
Ennek segítségével rendelhetünk statikus adatokat a felhasználókhoz. Legtöbbször akkor használjuk, ha az IdP-nél történt azonosítás tényéből attribútumokat akarunk származtatni.

Egy  egyszerre több attribútumot is tud szolgáltatni, ill. egy attribútumnak több értéke is lehet. Bővebben lásd a Shibboleth wiki vonatkozó részét!

Attribútumok előkészítése (AttributeDefinition)
Az attribútum definíciók arra valók, hogy az adatforrásból származó értéket az átvitelt biztosító SAML szabványnak, illetve az attribútumot fogadó SP-nek megfelelő formátumba konvertálják. Ezért minden attribútum definíciónál meg lehet adni függőséget, amelyből az attribútum értéke származik. A függőségnek két fajtája van: Mindkét függőség megadásakor a requires XML attribútummal hivatkozhatunk a DataConnector vagy az AttributeDefinition id-jére. Ebből következik az is, hogy minden attribútum definíciónak egyedi id mezője kell, hogy legyen.
 * DataConnectorDependency: az attribútum értéke egy már definiált adatforrásból származik.
 * AttributeDependency: az attribútum értéke egy másik (feloldott) attribútum értékéből származik

SimpleAttributeDefinition
Ezzel a pluginnal egyszerű műveleteket végezhetünk az adatforrásokból származó értékeken (vagy akár átalakítás nélkül is továbbíthatjuk). Az alábbi attribútumokkal rendelkezik:
 * id: ezzel lehet rá függőségekben hivatkozni, ill. az attribútum forrásának megállapításához is felhasználható. Az Assertion-ben ennek az értéke szerepel attribútum névként.
 * sourceName: ezzel lehet explicit módon meghatározni a forrás nevét
 * smartScope: ha az érték nem scope-olt (azaz nem  formátumú), akkor az attribútum scope-ja a   lesz, ellenkező esetben a scope értéke a "@ utáni rész" lesz (pl.:  ).
 * (Leegyszerűsítve) egy Assertion-ben egy attribútum így adható meg: attribútum név + scope + érték(ek)


 * allowEmpty: ez a boolean paraméter adja meg, hogy az üres érték elfogadható-e. Alapértelmezett értéke, azaz ha nincs érték, akkor az Assertion-be nem kerül bele az attribútum. Ha   , akkor érték nélkül kerül bele.

A sourceName mezőt nem kötelező megadni, mert a forrás attribútum neve megadható az id paraméterben is. A forrás attribútum nevének meghatározása a következő sorrendben történik:
 * 1) Ha meg van adva a sourceName, akkor az adat konnektortól ezt az attribútumot kapja meg
 * 2) Ha van olyan - az adat konnektor által nyújtott - attribútum, amely az id mezővel teljesen megegyezik, akkor annak az értékét használja
 * 3) Egyébként az adat konnektortól az id mezőben megadott paraméter utolsó ":" vagy "/" jel utáni részének megfelelő attribútumot kérdezi le.

Példa 1.: a directory nevű adat konnektortól lekérdezi a "cn" attribútumot, majd ennek értékét az  attribútumban küldi el a másik félnek.

Példa 2.: a directory nevű adat konnektortól lekérdezi a displayName attribútumot, majd ennek értékét az  (!) attribútumban küldi el a másik félnek.

Példa 3.: a (már korábban feloldott)  attribútumot (amennyiben az nem scope-olt) kiegészíti az "niif.hu" scope-pal, és ezt adja át   néven. Ha viszont az uid értéke pl. , akkor az átadott érték a  lesz, a scope pedig.

Részletes leírást lásd a Shibboleth wiki vonatkozó részében!

CompositeAttributeDefinition
TODO, lásd: https://spaces.internet2.edu/display/SHIB/CompositeAttributeDefinition

RegExpAttributeDefinition
TODO, lásd: https://spaces.internet2.edu/display/SHIB/RegExpAttributeDefinition

ScriptletAttributeDefinition
TODO, lásd: https://spaces.internet2.edu/display/SHIB/ScriptletAttributeDefinition

SAML2PersistentID
TODO, lásd: https://spaces.internet2.edu/display/SHIB/SAML2PersistentIDAttributeDefinition

Tesztelés
A Shibboleth IdP-hez tartozik egy resolvertest névre hallgató program, amellyel ellenőrizhetjük az attribútumok feloldását. Használatához először be kell állítani a telepítésnek megfelelően az IDP_HOME és a JAVA_HOME változókat.

Példa:

Forrás

 * https://spaces.internet2.edu/display/SHIB/NewIdPAttribute
 * https://spaces.internet2.edu/display/SHIB/IdPAttributeConfig