Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
cs:tech:idp:persistent-id [2014/10/01 09:51] – [Aktualizace metadat] - když je NameIDFormat v IDPSSODescriptor, metadata neprochází přes emd.cesnet.cz testovátko jop@cesnet.czcs:tech:idp:persistent-id [2019/12/13 09:39] (aktuální) – odstraněno 9ec128d6c1ed31e124c9d0343d1175613f20f405@einfra.cesnet.cz
Řádek 1: Řádek 1:
-====== Persistentní ID ====== 
  
-U Shibboleth IdP 2.x existuje přímá podpora persistentních ID, která vyžaduje externí SQL databázi pro ukládání dat. V následujícím návodě používáme MySQL databázi. 
- 
-===== Databáze ===== 
- 
-Vytvoříme databázi //shibboleth// a nastavíme práva pro uživatele, pod kterým se bude připojovat Shibboleth: 
- 
-<code> 
-mysql> CREATE DATABASE shibboleth; 
-mysql> GRANT ALL PRIVILEGES ON shibboleth.* TO shib@localhost IDENTIFIED BY '<heslo>'; 
-</code> 
- 
-V databázi //shibboleth// vytvoříme následující tabulku: 
- 
-<code> 
-CREATE TABLE IF NOT EXISTS shibpid ( 
-  localEntity TEXT NOT NULL, 
-  peerEntity TEXT NOT NULL, 
-  principalName VARCHAR(255) NOT NULL default '', 
-  localId VARCHAR(255) NOT NULL, 
-  persistentId VARCHAR(36) NOT NULL, 
-  peerProvidedId VARCHAR(255) default NULL, 
-  creationDate timestamp NOT NULL default CURRENT_TIMESTAMP 
-   on update CURRENT_TIMESTAMP, 
-  deactivationDate timestamp NULL default NULL, 
-  KEY persistentId (persistentId), 
-  KEY persistentId_2 (persistentId, deactivationDate), 
-  KEY localEntity (localEntity(16), peerEntity(16), localId), 
-  KEY localEntity_2 (localEntity(16), peerEntity(16), 
-  localId, deactivationDate) 
-) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
-</code> 
- 
-===== Instalace JDBC connectoru ===== 
- 
-Pro přístup k SQL databázi z prostředí Shibboleth IdP potřebujeme nainstalovat příslušný JDBC connector. Stahneme ho [[http://dev.mysql.com/downloads/connector/j/|ze stránek MySQL]] a rozbalíme ho v libovolném adresáři: 
- 
-<code> 
-# cd /opt/tmp/ 
-# tar xvfz mysql-connector-java-5.1.16.tar.gz 
-</code> 
- 
-Zkopírujeme příslušnou .jar knihovnu do adresáře lib/ v distribuci Shibboleth IdP: 
- 
-<code> 
-# cp mysql-connector-java-5.1.16/mysql-connector-java-5.1.16-bin.jar /opt/tmp/shibboleth-identityprovider-2.x.x/lib/ 
-</code> 
- 
-Poté musíme spustit instalační skript Shibboleth IdP. Pokud jde o první spuštění instalačního skriptu, podívejte se do [[cs:tech:idp:common:#instalace|instalačního návodu]]. Pokud jste instalaci už provedli anebo pokud nastavujete persistentní ID dodatečně, u otázky, zda přepisovat konfiguraci odpovězte negativně: 
-<code> 
-[..] 
-The directory '/opt/shibboleth-idp-2.3.0' already exists.  Would you like to overwrite this Shibboleth configuration? (yes, [no]) 
-no 
-[..] 
-</code> 
- 
-===== Konfigurace Shibboleth IdP ===== 
- 
-V konfiguračním souboru attribute-resolver.xml vytvoříme: 
- 
-  * StoredID connector, který se bude připojovat k SQL databázi 
-  * příslušný PrincipalConnector, který má na starost zpětný překlad persistentního ID na identitu uživatele 
-  * atributy a identifikátory (name identifiers), které budou obsahovat persistentní ID 
- 
-==== StoredID connector ==== 
- 
-Vytvoříme StoredID connector a v něm nastavíme přístup k SQL databázi. 
- 
-:!: **Je potřeba správně nastavit salt, viz níže.** 
- 
-<code xml> 
-    <resolver:DataConnector id="myStoredId" 
-        xsi:type="dc:StoredId" 
-        generatedAttributeID="storedId" 
-        sourceAttributeID="uid" 
-        salt="SALT"> 
-        <resolver:Dependency ref="uid" /> 
-        <dc:ApplicationManagedConnection 
-            jdbcDriver="com.mysql.jdbc.Driver" 
-            jdbcURL="jdbc:mysql://127.0.0.1:3306/shibboleth?autoReconnect=true" 
-            jdbcUserName="shib" 
-            jdbcPassword="HESLO" /> 
-    </resolver:DataConnector> 
-</code> 
- 
-Význam některých atributů: 
-  * **sourceAttributeID** - název zdrojového atributu nesoucí identitu uživatele 
-  * **generatedAttributeID** - název vygenerovaného atributu, výchozí hodnota je "storedID" 
-  * **salt** - řetězec používaný během generování persistentních ID, jeho **minimální dálka musí byt 16 znaků, doporučená délka je 48 znaků**, je nezbytné jeho hodnotu zálohovat pro případ ztráty konfigurace, aby nedošlo ke ztrátě všech persistentních ID  
- 
-==== Stored ID PrincipalConnector ==== 
- 
-Tento PrincipalConnector mapuje persistentní ID zpět na identitu z které bylo persistentní ID vytvořeno. Je potřeba v případě, že chceme, aby náš IdP podporoval tzv. //persistentní name identifikátory// (name identifier). Umístíme ho na konci souboru attribute-resolver.xml za ostatními PrincipalConnectory: 
- 
-<code xml> 
-<resolver:PrincipalConnector xsi:type="pc:StoredId" xmlns:pc="urn:mace:shibboleth:2.0:resolver:pc" 
-                             id="saml2Persistent" 
-                             nameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"  
-                             storedIdDataConnectorRef="myStoredId"/> 
-</code> 
- 
-==== Atributy ==== 
- 
-Pro uvolnění hodnoty persistentního ID se používá atribut typu [[https://wiki.shibboleth.net/confluence/display/SHIB2/ResolverSAML2NameIDAttributeDefinition|SAML2NameID]]: 
- 
-<code xml> 
-<resolver:AttributeDefinition xsi:type="ad:SAML2NameID" id="eduPersonTargetedID"  
-    nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" sourceAttributeID="storedId"> 
- 
-    <resolver:Dependency ref="myStoredId" /> 
-    <resolver:AttributeEncoder xsi:type="enc:SAML1XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" /> 
-    <resolver:AttributeEncoder xsi:type="enc:SAML2XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10"  
-        friendlyName="eduPersonTargetedID" /> 
-</resolver:AttributeDefinition> 
-</code> 
- 
-Hodnotu persistentního ID je možné také použít pro persistentní [[https://wiki.shibboleth.net/confluence/display/SHIB2/IdPNameIdentifier|name identifier]]. Na rozdíl oproti výše uvedené definici, jde o atribut typu Simple, kde je použit SAML2StringNameID attribute encoder, viz [[https://wiki.shibboleth.net/confluence/display/SHIB2/IdPPersistentNameIdentifier|dokumentace]]. 
- 
-<code xml> 
-<resolver:AttributeDefinition id="persistentId" xsi:type="ad:Simple" sourceAttributeID="storedId"> 
-    <resolver:Dependency ref="myStoredId"/> 
-    <resolver:AttributeEncoder xsi:type="enc:SAML2StringNameID" nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/> 
-</resolver:AttributeDefinition> 
-</code> 
- 
-Ačkoliv v obou případech jde o definice atributů, v druhém případě je to zároveň deklarace dalšího name identifikátora - peristentního, vedle běžného transientního. Víc informací o rozdílech obou indentifikátoru najdete v [[https://wiki.shibboleth.net/confluence/display/SHIB2/IdPNameIdentifier|dokumentaci]]. V případě, že se rozhodnete podporovat persistentní identifikátor, je potřeba v metadatech IdP tuto skutečnost deklarovat, viz dále. 
- 
- 
-===== Aktualizace metadat ===== 
- 
-V případě, že se rozhodneme podporovat persistentní name identifier a máme správně nastavený příslušný atribut, zároveň je potřeba v metadatech IdP tuto podporu deklarovat elementem //NameIDFormat//, který přidáme do sekce //AttributeAuthorityDescriptor//: 
- 
-<code xml> 
-<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat> 
-</code>