# Shibboleth IdP konfigurációja

<p class="callout danger">**Elavult információ**  
  
**Figyelem**: a Shibboleth szoftver ezen változata már nem támogatott. Az új verziókhoz a leírások itt találhatók:   
  
• [Shibboleth2\_IdP](https://help.edu.hu/books/shibboleth/page/shibboleth2-idp)  
• [Shibboleth2\_SP](https://help.edu.hu/books/shibboleth/page/shibboleth2-sp)</p>

Az IdP alkalmazást az **`idp.xml`** állományon keresztül konfigurálhatjuk. Ebben a leírásban feltételezzük, hogy az IdP alkalmazás konfigurációs állományai a **`/etc/shibboleth-idp`** könyvtárban vannak.

## Működő példa konfiguráció

```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<IdPConfig
        xmlns="urn:mace:shibboleth:idp:config:1.0"
        xmlns:cred="urn:mace:shibboleth:credentials:1.0"
        xmlns:name="urn:mace:shibboleth:namemapper:1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:mace:shibboleth:idp:config:1.0 ../schemas/shibboleth-idpconfig-1.0.xsd"
        AAUrl="https://idp.niif.hu:8443/shibboleth-idp/AA"
        resolverConfig="file:/etc/shibboleth-idp/resolver.ldap.xml"
        defaultRelyingParty="urn:niif.hu:aai:HREF"
        defaultAuthMethod="urn:oasis:names:tc:SAML:1.0:am:password"
        providerId="https://idp.niif.hu/shibboleth">

        <RelyingParty name="urn:niif.hu:aai:HREF" signingCredential="href_cred">
                <NameID nameMapping="shm"/>
        </RelyingParty>
        <RelyingParty name="urn:geant:niif.hu:niifi:sp:register.ca.niif.hu"
                      signingCredential="href_cred"
                      forceAttributePush="true">
                <NameID nameMapping="shm"/>
        </RelyingParty>

        <ReleasePolicyEngine>
                <ArpRepository implementation="edu.internet2.middleware.shibboleth.aa.arp.provider.FileSystemArpRepository">
                        <Path>file:/etc/shibboleth-idp/arps/</Path>
                </ArpRepository>
        </ReleasePolicyEngine>

        <Logging>
                <ErrorLog level="DEBUG" location="file:/var/log/shibboleth-idp/shib-error.log" />
                <TransactionLog level="INFO" location="file:/var/log/shibboleth-idp/shib-access.log" />
        </Logging>

        <NameMapping
                xmlns="urn:mace:shibboleth:namemapper:1.0"
                id="shm"
                format="urn:mace:shibboleth:1.0:nameIdentifier"
                type="SharedMemoryShibHandle"
                handleTTL="28800"/>

        <ArtifactMapper implementation="edu.internet2.middleware.shibboleth.artifact.provider.MemoryArtifactMapper" />

        <Credentials xmlns="urn:mace:shibboleth:credentials:1.0">
                <FileResolver Id="href_cred">
                        <Key>
                                <Path>file:/etc/httpd/conf/ssl.key/idp.niif.hu.key</Path>
                        </Key>
                        <Certificate>
                                <Path>file:/etc/httpd/conf/ssl.crt/idp.niif.hu.crt</Path>
                        </Certificate>
                </FileResolver>
        </Credentials>

        <ProtocolHandler implementation="edu.internet2.middleware.shibboleth.idp.provider.ShibbolethV1SSOHandler">
                <Location>https?://[^:/]+(:(443|80))?/shibboleth-idp/SSO</Location> <!-- regex works when using default protocol ports -->
        </ProtocolHandler>
        <ProtocolHandler implementation="edu.internet2.middleware.shibboleth.idp.provider.SAMLv1_AttributeQueryHandler">
                <Location>.+:8443/shibboleth-idp/AA</Location>
        </ProtocolHandler>
        <ProtocolHandler implementation="edu.internet2.middleware.shibboleth.idp.provider.SAMLv1_1ArtifactQueryHandler">
                <Location>.+:8443/shibboleth-idp/Artifact</Location>
        </ProtocolHandler>
        <ProtocolHandler implementation="edu.internet2.middleware.shibboleth.idp.provider.Shibboleth_StatusHandler">
                <Location>https://[^:/]+(:443)?/shibboleth-idp/Status</Location>
        </ProtocolHandler>

        <MetadataProvider type="edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata"
                uri="file:/etc/shibboleth-idp/href-metadata.xml"/>
</IdPConfig>

```

## XML elemek magyarázata

### IdPConfig

Az IdPConfig elem attribútumai közül az xmlns: és xsi: attribútumokat nem szabad megváltoztatni, de van néhány, amit kötelező:

- *defaultRelyingParty*: ez adja meg, hogy melyik [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty)-t kell használni, ha a request alapján nem állapítható meg. Ha nincs ehhez tartozó RelyingParty elem, akkor az IdP nem indul el.
- *providerID*: ez adja meg az IdP egyedi azonosítóját a [föderációban](https://help.edu.hu/books/alapok-es-fogalmak/page/foderacio). Általában URN vagy URL formában adjuk meg.
- *resolverConfig*: az [attribútum feloldás](https://help.edu.hu/books/aai-4BA/page/attributum-feloldas) konfigurációs állományát adja meg.
- *AAUrl*: az <a>Attribute Authority</a> elérhetősége. <small>(Erre csak a Shibboleth 1.1-el való kompatibilitás megőrzése érdekében van szükség. Nem biztos, hogy kötelező megadni...)</small>

Általában nem szükséges megadni:

- *authHeaderName*: itt kell megadni, ha az <a>SSO Handler</a> más változóban kapja meg a felhasználó azonosítóját (principal), mint a REMOTE\_USER szerver változó
- *defaultAuthMethod*: megadható, hogy az elkészített SAML <a>Assertion</a> milyen autentikációs metódust tartalmazzon. A lehetséges értékek a [SAML 1.1 specifikáció](http://www.oasis-open.org/committees/download.php/3406/oasis-sstc-saml-core-1.1.pdf) 7.1-es szakaszában találhatók. Ha nincs megadva, akkor az értéke `urn:oasis:names:tc:SAML:1.0:am:unspecified`. A `defaultAuthMethod` értéke RelyingParty szintjén felülbírálható
- *maxSigningThreads*: az üzenet aláírására és egyéb műveletekre indított thread-ek maximális száma. Az IdP teljesítménye hangolható ezzel.
- *passThruErrors*: boolean változó, amely azt szabályozza, hogy a hibákat az IdP továbbadja-e az SP felé

Az IdP konfigurációban a többi XML Element az IdPConfig gyereke.

### RelyingParty

Egy IdP tetszőleges mennyiségű [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty)-t kezelhet.

A legfelső szintű alapértelmezett beállításokon kívül minden egyes [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty)-ra beállíthatjuk az alábbi értékeket:

- *name* (kötelező): a [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty) neve. Ha nem egyezik meg az SP által küldött [providerId](https://help.edu.hu/books/hrefeduid-foderacio/page/providerid)-vel, akkor az IdP a [metadata](https://help.edu.hu/books/alapok-es-fogalmak/page/metadata) segítségével próbálja megállapítani, hogy az SP-re melyik RelyingParty definíció vonatkozik.
- *providerId*: az a [providerId](https://help.edu.hu/books/hrefeduid-foderacio/page/providerid), amelyet az IdP használ a [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty)-k felé.
- *signingCredential*: az <a>Assertion</a>-ök és az SSL sessionben használt SSL kulcsokra vonatkozó FileResolver elem ID-jét adhatjuk meg itt.
- *AAUrl*: az <a>Attribute Authority</a> elérhetősége.
- *defaultAuthMethod*: megadható, hogy a [RelyingParty](https://help.edu.hu/books/aai-4BA/page/relyingparty) számára elkészített SAML <a>Assertion</a> milyen autentikációs metódust tartalmazzon. A lehetséges értékek a [SAML 1.1 specifikáció](http://www.oasis-open.org/committees/download.php/3406/oasis-sstc-saml-core-1.1.pdf) 7.1-es szakaszában találhatók. Ha nincs megadva, akkor az értéke az IdPConfig element-nél megadott érték, ill. `urn:oasis:names:tc:SAML:1.0:am:unspecified`.
- *passThruErrors*: boolean változó, amely azt szabályozza, hogy a hibákat az IdP továbbadja-e az SP felé. Alapértelmezett érték: false
- *signAssertions*: boolean változó, amely azt szabályozza, hogy az IdP aláírja-e a kiállított <a>Assertion</a>-öket. Leginkább akkor van rá szükség, ha az Assertion-t más alkalmazásnál is fel akarjuk használni. Alapértelmezett érték: false
- *forceAttributePush*: boolean változó, ennek segítségével ki lehet kényszeríteni az [Attribute Push](https://help.edu.hu/books/aai-4BA/page/attributepushpull) használatát. Alapértelmezett érték: false

A RelyingParty element NameID gyermeke segítségével állítható be a használt [NameID kezelés](#bkmrk-namemapping).

### ReleasePolicyEngine

Itt adhatjuk meg az [attribútum kiadás](https://help.edu.hu/books/elavult-archiv/page/attributum-kiadas) implementációját (ezt általában nem kell változtatni) és az <a>ARP</a> állományok elérhetőségét.

### Logging

A Logging element szabályozza a naplózási szintet, ill. a naplófile-ok helyét. Részletesebb beállításokra a Log4J-t is használhatjuk. (Lásd még: <a>Értelmes naplóüzenetek (IdP)</a>)

### NameMapping

Ebben az elemben adható meg a NameMapper implementációja, illetve az <a>assertionökben</a> használt azonosító (Subject Identifier) formátuma.

- <small>Az alapértelmezett értékek az esetek többségében megfelelők, csak akkor módosítsd, ha tudod, mit csinálsz!</small>

**Attribútumok:**

- *id*: egyedi név, erre lehet hivatkozni a NameID elementben.
- *format* (URI): ez határozza meg a Subject Identifier formátumát. Tetszőleges URN használható, amiben az IdP és az SP megegyezik. Néhány gyakrabban használt formátum: 
    - `urn:mace:shibboleth:1.0:nameIdentifier`: alapértelmezett Shibboleth azonosító (tranziens, átlátszó)
    - `urn:oasis:names:tc:SAML1.1:nameid-format:X509SubjectName`: X.509 tanúsítvány DN. A [GridShib](http://gridshib.globus.org/) használja ezt a formátumot.
    - `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`: email-cím, használata nem javasolt
    - `http://schemas.xmlsoap.org/claims/UPN`: MS UPN, az <a>ADFS</a> integrációhoz használható
- *class*: a NameMapper implementációjának a javaclass útvonala. (<a>HAShib</a> használatához módosítani kell.)   
    A további attribútumok csak az alapértelmezett implementáció esetén értelmezhetők.
- *handleTTL*: azt határozza meg, hogy az IdP mennyi ideig őrizze a Session Cache-ében a kiosztott azonosítókat. (Csak `urn:mace:shibboleth:1.0:nameIdentifier` formátum esetén értelmezhető.) Ezt követően erre az azonosítóra történő hivatkozás már nem lesz megengedett, a felhasználónak esetleg újra kell azonosítania magát.
- *type*: azt adja meg, hogy az <a>SSO Handler</a> és az <a>Attribute Authority</a> között milyen formában utazzanak az azonosítók. Lehetséges értékek: 
    - `CryptoHandleGenerator`: szimmetrikus kódolással titkosított azonosítók használata
    - `Principal`: az <a>SSO Handler</a>-től megkapott azonosító átadása az <a>Attribute Authority</a>-nek
    - `SharedMemoryShibHandle`: (alapértelmezett) megosztott, memóriában tárolt session cache. Ha az <a>SSO Handler</a> és az <a>Attribute Authority</a> egy konténerben futnak, ezt érdemes használni.

### ArtifactMapper

Itt adható meg az ArtifactMapper implementációja. <a>HAShib</a> használata esetén át kell állítani.

### Credentials

Ebben az elemben adhatók meg a használt titkos kulcsok és tanúsítványok. Több is megadható, az *id* attribútum értékével hivatkozhatunk rájuk, pl a [RelayingParty konfigurációban](#bkmrk-relyingparty).

### ProtocolHandler

Itt adhatók meg az egyes handler servletek elérhetőségei. Általában nem szükséges felülírni!

## Forrás

\*\* Shibboleth Wiki\*\*

- [IdP fő konfiguráció](https://spaces.internet2.edu/display/SHIB/IdPMainConfig)
- [Relying Party konfiguráció](https://spaces.internet2.edu/display/SHIB/IdPRelyingConfig)
- [NameMapping](https://spaces.internet2.edu/display/SHIB/IdPUserAuthnConfig)