„SSP2” változatai közötti eltérés

Innen: KIFÜ Wiki
(Új oldal, tartalma: „== SSP2 leírás ==”)
 
a
 
(7 közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva)
1. sor: 1. sor:
== SSP2 leírás ==
+
Az alábbi lapon megkíséreljük összefoglalni a legfontosabb lépéseket, melyek általános esetben elegendőek ahhoz, hogy működő SimpleSAMLphp (SSP) alkalmazást állítsunk üzembe.
 +
 
 +
==Telepítés==
 +
Először is nagyvonalakban leírásra kerülnek az előkészületek ezt követően pedig maga a szoftver telepítése és beállítása.
 +
===Előkészületek===
 +
Ahhoz, hogy problémamentesen telepíthessük SSP alkalmazásunkat, az alábbi szoftverkomponenseknek kell működniük szerverünkön.
 +
* A következő könyvtárakat kiegészítőket telepíteni kell:  <code>wget openssl unzip build-essential libldap2-dev libldap-common</code>
 +
* PHP futtatására alkalmas webszerver
 +
* PHP környezet (>=8.0)
 +
* A következő PHP kiterjesztéseket engedélyezni kell
 +
** <code>posix, date , dom , fileinfo , filter , hash , json , libxml , mbstring , openssl , pcre , session , simplexml , sodium , SPL, zlib, ldap</code>
 +
** Adatbázisból történő autentikáció esetén a megfelelő adatbázis-csatolót <code>mysqli, pdo, pdo_mysql</code>
 +
** RADIUS szerveren keresztül történő autentikáció esetén: <code>radius</code>
 +
* Információk, certek:
 +
** Bár a szoftver képes futni mariadb, és redis nélkül, ezek vagy hasonló megoldások használata éles környezetben ajánlott.
 +
*** Amennyiben ezeket szándékozunk használni database connection stringgel kell rendelkezni, redis elérhetőséggel és jelszóval rendelkezni.
 +
*** Az adatbázis szerkezetének kialakítása a használt moduloktól függ, a leggyakoribb a consent modul, ott van is dokumentáció az adatbázis inicializálásáról.
 +
 
 +
** Szükséges 2 certpár, az egyik az apachenak a másik az SSP-nek ezutóbbi lehet önalárírt, és nem ajánlott ugyan azt használni.
 +
 
 +
====Composer====
 +
 
 +
A '''[https://getcomposer.org composer]''' PHP csomagkezelőt is telepíteni kell (akár forrásból, akár csomagból), hogy telepíteni lehessen a SimpleSAMLphp futásához szükséges PHP library-ket.
 +
 
 +
===Telepítés===
 +
Elvégezhető composerrel például a <code>/var/</code> mappában:
 +
 
 +
<code>composer create-project simplesamlphp/simplesamlphp:2.1.3</code>
 +
 
 +
Mappaszerkezet módosítása:
 +
 
 +
mv simplesamlphp simplesamlphp-prod #Tetszőleges átnevezés
 +
mkdir -p simplesamlphp-prod/cert
 +
mkdir -p /var/simplesamlphp-prod/log/stats/
 +
mkdir -p /var/simplesamlphp-prod/mdx-cache/
 +
chown -R www-data:www-data /var/simplesamlphp-prod/mdx-cache/
 +
chown -R www-data:www-data /var/simplesamlphp-prod/log/
 +
chown -R www-data:www-data /var/simplesamlphp-prod/metadata/
 +
 
 +
 
 +
Composerrel a szükséges modulok telepítése (például LDAP, REDIS, vagy consent):
 +
 
 +
composer require simplesamlphp/simplesamlphp-module-ldap:v2.3.2
 +
composer require predis/predis:2.2.2
 +
composer require simplesamlphp/simplesamlphp-module-consent:1.3.2
 +
 
 +
Ezzel a telepítés, és a szükséges kiegészítők telepítése megtörtént.
 +
 
 +
 
 +
===Apache konfigurálás===
 +
 
 +
A webről csak a <code>/var/simplesamlphp-prod/public</code> könyvtárat kell elérni. '''Tilos''' a teljes simplesamlphp könyvtárat a DocumentRoot alá tenni!
 +
 
 +
Alias /simplesaml /var/simplesamlphp-prod/public
 +
<Directory /var/simplesamlphp-prod/public>
 +
  Require all granted
 +
</Directory>
 +
===Simplesamlphp Alapbeállítások===
 +
====Konfigurációs fájlok====
 +
Amennyiben korábbi verziókat használtunk,
 +
 
 +
jó megközelítés lehet diff segítségével ellenőrizni a különbségeket a korábbi <code>config.php</code> fileunk és a <code>config.php.dist</code> között.
 +
 
 +
Ha ilyennel nem rendelkezünk akkor lehet rögtön alapul venni a <code>config.php.dist</code>-et és hasonlóképp a metadata-templates mappát.
 +
 
 +
====Konfigurációs fájlok szerkesztése====
 +
 
 +
=====Baseurlpath beállítása=====
 +
 
 +
- Állítsuk be a baseurlpath opciót. Mutasson a telepítés URL-jére, ahol a SimpleSAMLphp elérhető:
 +
 
 +
<code>'baseurlpath' => 'https://your.canonical.host.name/simplesaml/',</code>
 +
 
 +
=====Adminisztrációs adatok beállítása=====
 +
 
 +
* '''Az "admin" felhasználó jelszavát, mellyel webes felületen keresztül be tud lépni a települő SSP-be.'''
 +
'auth.adminpassword'        => 'ujjelszotirdide',
 +
* '''Titkosítási feladatokhoz szükséges "salt", azaz véletlenszerűen összeálló karaktersorozat'''
 +
'secretsalt' => 'randombytesinsertedhere',
 +
A karaktersorozat előállításában segíthet az alábbi parancs:
 +
tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo
 +
* '''Elérhetőségeket, amely adatok bekerülnek majd a generált metaadatba'''
 +
'technicalcontact_name'    => 'Gipsz Jakab',
 +
'technicalcontact_email'    => 'jakab.gipsz@example.org',
 +
* '''Nyelv és időzóna adatok'''
 +
'language.default'      => 'hu',
 +
'timezone' => 'Europe/Budapest',
 +
 
 +
Az alapadatok megadása után mentsük és zárjuk be a '''config.php'''-t.
 +
 
 +
=====Naplózás beállítása=====
 +
 
 +
Alapértelmezetten a SimpleSAMLphp a '''syslog'''-ba irányítja a naplózást.
 +
 
 +
Ha fájlba akarunk naplózni, akkor a megfelelő könyvtárhoz biztosítsunk írás jogot a webszerver felhasználónak, és ne felejtsünk el gondoskodni a naplófájlok rotálásáról!
 +
 
 +
* Naplózási szint beállítása a '''config/config.php'''-ban
 +
'debug' => array(
 +
        'saml' => true,
 +
        'backtraces' => true,
 +
        'validatexml' => false,
 +
),
 +
'logging.level' => SimpleSAML\Logger::DEBUG,
 +
'logging.handler' => 'file',
 +
 
 +
<span style="color:red">A "SimpleSAML\Logger::DEBUG" a legrészletesebb naplózási beállítás, éles rendszernél nem ajánlott csak hiba keresés esetén.</span>
 +
 
 +
 
 +
=====Modulok engedélyezése=====
 +
'module.enable' => [
 +
  'exampleauth' => true,
 +
  'saml' => false, //
 +
  'core' => null, // Alapértelmezett érték
 +
  'ldap' => true, // 2.x verzióban külön telepíteni és engedélyezni kell az ldap modult.
 +
  'admin' => true, // Ezt szükséges engedélyezni hogy elérhessük az adminisztrációs felületet
 +
],
 +
 
 +
=====Tanúsítvány készítése=====
 +
 
 +
<span style="color:red">Nem ajánlott a SimpleSAMLphp-hoz és webszerverhez ugyanazt a tanúsítvány használni!</span>
 +
 
 +
* A SimpleSAMLphp alapértelmezetten a tanúsítványt a '''cert''' mappában keresi.
 +
 
 +
* Az alábbi paranccsal egy 10 éves [[FedCerts |  self-signed tanúsítvány]] generálunk a SimpleSMALphp számára.
 +
openssl req -new -newkey rsa:3072 -x509 -days 3652 -nodes -out cert/saml-example-org.crt -keyout cert/saml-example-org.key
 +
 
 +
A fingerprint az alábbi módon kérdezhető le a legegyszerűbben
 +
openssl x509 -fingerprint -noout -in cert/saml-example-org.crt
 +
 
 +
===Telepítés kész===
 +
Amennyiben elkészültünk a fenti lépésekkel, úgy a [https://service.example.org/simplesaml/admin https://service.example.org/simplesaml/admin] címen elérjük a telepített SSP-nk webes adminfelületét.
 +
 
 +
==Identity Provider (IdP) beállítás==
 +
===Alapbeállítások===
 +
'''IdP''' engedélyezése: a '''config/config.php''' fájlban kell a saml20 idp-t "true"-re állítani.
 +
'enable.saml20-idp' => true,
 +
 
 +
===Metaadat alapok===
 +
A beállítandó IdP alapvető paraméterei a <code>metadata/saml20-idp-hosted.php</code> fájlban állíthatók. Az alábbi kódrészlet egy minimális, de már működő példát mutat.
 +
<source lang="php">
 +
<?php
 +
$metadata['https://example.org/saml-idp'] = [
 +
    /*
 +
    * The hostname for this IdP. This makes it possible to run multiple
 +
    * IdPs from the same configuration. '__DEFAULT__' means that this one
 +
    * should be used by default.
 +
    */
 +
    'host' => '__DEFAULT__',
 +
    /*
 +
    * The private key and certificate to use when signing responses.
 +
    * These can be stored as files in the cert-directory or retrieved
 +
    * from a database.
 +
    */
 +
    'privatekey' => 'example.org.pem',
 +
    'certificate' => 'example.org.crt',
 +
    /*
 +
    * The authentication source which should be used to authenticate the
 +
    * user. This must match one of the entries in config/authsources.php.
 +
    */
 +
    'auth' => 'example-ldap',
 +
];
 +
</source>
 +
 
 +
A fentebb hivatkozott certeket korábban létrehoztuk, de az example-ldap auth forrást még nem:
 +
 
 +
===LDAP autentikáció===
 +
 
 +
Javasolt az LDAP-ban egy olyan bejegyzést létrehozni az IdP számára, amely olvasni tudja a felhasználóknak a föderációban használt attribútumait. Az azonosítás alapértelmezett módon a felhasználó nevében történő újra bind-olással történik, így a jelszóhoz nem kell hozzáférést adni.
 +
 
 +
Ahhoz, hogy megadhassuk az LDAP-hoz tartozó beállításokat, a <code>config/authsources.php</code> fájlt kell szerkesztenünk. Az alábbi kódrészletet elegendő beszúrni, és az egyes változóknak a helyi LDAP-nak megfelelő adatokat értékül adni.
 +
<source lang="php">
 +
'example-ldap' => [
 +
        'ldap:Ldap',
 +
 
 +
        /**
 +
        * The connection string for the LDAP-server.
 +
        * You can add multiple by separating them with a space.
 +
        */
 +
        'connection_string' => 'ldap.example.org',
 +
 
 +
        /**
 +
        * Whether SSL/TLS should be used when contacting the LDAP server.
 +
        * Possible values are 'ssl', 'tls' or 'none'
 +
        */
 +
        'encryption' => 'ssl',
 +
 
 +
        /**
 +
        * The LDAP version to use when interfacing the LDAP-server.
 +
        * Defaults to 3
 +
        */
 +
        'version' => 3,
 +
 
 +
        /**
 +
        * Set to TRUE to enable LDAP debug level. Passed to the LDAP connector class.
 +
        *
 +
        * Default: FALSE
 +
        * Required: No
 +
        */
 +
        'debug' => false,
 +
 
 +
        /**
 +
        * The LDAP-options to pass when setting up a connection
 +
        * See [Symfony documentation]
 +
        */
 +
        'options' => [
 +
            /**
 +
            * Set whether to follow referrals.
 +
            * AD Controllers may require 0x00 to function.
 +
            * Possible values are 0x00 (NEVER), 0x01 (SEARCHING),
 +
            *  0x02 (FINDING) or 0x03 (ALWAYS).
 +
            */
 +
            'referrals' => 0x00,
 +
 
 +
            'network_timeout' => 3,
 +
        ],
 +
 
 +
        /**
 +
        * The connector to use.
 +
        * Defaults to '\SimpleSAML\Module\ldap\Connector\Ldap', but can be set
 +
        * to '\SimpleSAML\Module\ldap\Connector\ActiveDirectory' when
 +
        * authenticating against Microsoft Active Directory. This will
 +
        * provide you with more specific error messages.
 +
        */
 +
        'connector' => '\SimpleSAML\Module\ldap\Connector\Ldap',
 +
 
 +
        /**
 +
        * Which attributes should be retrieved from the LDAP server.
 +
        * This can be an array of attribute names, or NULL, in which case
 +
        * all attributes are fetched.
 +
        */
 +
        'attributes' => null,
 +
 
 +
        /**
 +
        * Which attributes should be base64 encoded after retrieval from
 +
        * the LDAP server.
 +
        */
 +
        'attributes.binary' => [
 +
            'jpegPhoto',
 +
            'objectGUID',
 +
            'objectSid',
 +
            'mS-DS-ConsistencyGuid'
 +
        ],
 +
 
 +
        /**
 +
        * The pattern which should be used to create the user's DN given
 +
        * the username. %username% in this pattern will be replaced with
 +
        * the user's username.
 +
        *
 +
        * This option is not used if the search.enable option is set to TRUE.
 +
        */
 +
        'dnpattern' => 'uid=%username%,ou=people,dc=example,dc=org',
 +
 
 +
        /**
 +
        * As an alternative to specifying a pattern for the users DN, it is
 +
        * possible to search for the username in a set of attributes. This is
 +
        * enabled by this option.
 +
        */
 +
        'search.enable' => false,
 +
 
 +
        /**
 +
        * An array on DNs which will be used as a base for the search. In
 +
        * case of multiple strings, they will be searched in the order given.
 +
        */
 +
        'search.base' => [
 +
            'ou=people,dc=example,dc=org',
 +
        ],
 +
 
 +
        /**
 +
        * The scope of the search. Valid values are 'sub' and 'one' and
 +
        * 'base', first one being the default if no value is set.
 +
        */
 +
        'search.scope' => 'sub',
 +
 
 +
        /**
 +
        * The attribute(s) the username should match against.
 +
        *
 +
        * This is an array with one or more attribute names. Any of the
 +
        * attributes in the array may match the value the username.
 +
        */
 +
        'search.attributes' => ['uid', 'mail'],
 +
 
 +
        /**
 +
        * Additional filters that must match for the entire LDAP search to
 +
        * be true.
 +
        *
 +
        * This should be a single string conforming to [RFC 1960]
 +
        * and [RFC 2544]. The string is appended to the search attributes
 +
        */
 +
        'search.filter' => '(&(objectClass=Person)(|(sn=Doe)(cn=John *)))',
 +
 
 +
        /**
 +
        * The username & password where SimpleSAMLphp should bind to before
 +
        * searching. If this is left NULL, no bind will be performed before
 +
        * searching.
 +
        */
 +
        'search.username' => null,
 +
        'search.password' => null,
 +
    ],
 +
</source>
 +
 
 +
Megfelelő beállítások után a dinamikusan generált metadata a <code>/saml2/idp/metadata.php</code> útvonalon érhető el.
 +
 
 +
===Tesztelés===
 +
A usereknek már nincs adminisztrációs felület azonban adminként még be lehet lépni amennyiben a core modulok között engedélyeztük az admin felületet: `https://service.example.org/simplesaml/admin/`
 +
 
 +
A belépést követően a teszt fülre kattintva tesztelhetjük az authentikációs forrásokat:
 +
 
 +
https://idp.niif.hu/simplesaml/module.php/admin/test
 +
 
 +
===Kézi metadata csere, élesített SP-vel===
 +
 
 +
Az IdP metadata valamint metadata eszközök megtalálhatók a következő oldalon (admin fiók szükséges): [https://idp.example/simplesaml/module.php/admin/federation](https://idp.example/simplesaml/module.php/admin/federation)
 +
 
 +
Amennyiben az SP is simplesamlphp használhatjuk a fentihez hasonló elérési úton található SimplesSAMLphp SP Metadatát, ez php formátumban van, ellenkező esetben pl shibboleth sp meg kell keresnünk a metaadat XML-t majd a fentebb említett federation oldalon található XML →simplesamlphp metadata konvertert használni.
 +
 
 +
Az így kapott php formátumú metaadatokat pedig be kell illeszteni az IdP-n a <code>metadata/saml20-sp-remote.php</code> fileba a következő példához hasonlóképp:
 +
 
 +
<source lang="php">
 +
<?php
 +
 
 +
$metadata['https://sp.example.org/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = [
 +
    'AssertionConsumerService' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
 +
    'SingleLogoutService' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
 +
];
 +
</source>
 +
 
 +
A másik (SP) oldalon amennyiben szintén simplesamlphp van, az idp metaadatokat hasonlóképp hasonlóképp érjük el majd illesszük be a  metadata/saml20-idp-remote.php
 +
fileba.
 +
 
 +
 
 +
<source lang="php">
 +
<?php
 +
$metadata['https://example.org/saml-idp'] = [
 +
    'SingleSignOnService'  => 'https://example.org/simplesaml/saml2/idp/SSOService.php',
 +
    'SingleLogoutService'  => 'https://example.org/simplesaml/saml2/idp/SingleLogoutService.php',
 +
    'certificate'          => 'example.pem',
 +
];
 +
 
 +
</source>
 +
 
 +
A certet a config php-ban beállított certdir-ben keresi (alapértelmezetten /cert)
 +
Amennyiben más SP-t használunk az idp XML metadatájára lesz szükség amely szintén föderáció fül alatt érhető el ([https://idp.example/simplesaml/module.php/admin/federation](https://idp.niif.hu/simplesaml/module.php/admin/federation)), és az SPn-nek releváns dokumentációt kell követni.
 +
 
 +
==Service Provider (SP) beállítás==
 +
===Alapbeállítások===
 +
 
 +
A telepített alkalmazásunk által kezelt SP-ket a '''config/authsources.php''' fájlban tudjuk beállítani.
 +
A SimpleSAMLphp a tanúsítvány fájlokat a korábban létrehozott '''cert''' mappában fogja keresni, a fájlokat elég relatív elérési úttal megadni.
 +
 
 +
<source lang="php">
 +
<?php
 +
$config = [
 +
 
 +
    /* This is the name of this authentication source, and will be used to access it later. */
 +
    'default-sp' => [
 +
        'saml:SP',
 +
        'entityID' => 'https://myapp.example.org/',
 +
        'privatekey' => 'saml.pem',
 +
        'certificate' => 'saml.crt',
 +
        'idp' => 'https://example.org/saml-idp', //Alapértelmezett IdP beállítása
 +
    ],
 +
 
 +
];
 +
 
 +
</source>
 +
 
 +
 
 +
===Tesztelés===
 +
 
 +
A fent elvégzett alapbeállítások után már tudjuk tesztelni a, hogy a felépített IdP - SP kapcsolat működik-e.
 +
 
 +
SP oldalon nyissuk meg a '''admin''' teszt felületet:
 +
 
 +
https://idp.niif.hu/simplesaml/module.php/admin/test
 +
 
 +
Itt kattintsunk a default SP-re
 +
 
 +
==HREF-integráció==
 +
 
 +
===Metadata beállítása (IdP és SP is)===
 +
Javasolt [[MDX | dinamikus metaadatforrást (MDX)]] használni, opcionálisan kiegészítve statikus állományokkal. Részletes leírás itt: [[SimpleSAMLMixedMetadata]]
 +
 
 +
===IdP===
 +
Amennyiben van SSP alapú IdP-nk, melyet szeretnénk a föderáció részévé tenni, úgy a teendők a következők.
 +
* (Az adminisztratív teendőktől itt most eltekintünk, a csatlakozás folyamata [[HREFJoin|itt van leírva]])
 +
* Kell küldeni egy levelet a [mailto:info@eduid.hu info@eduid.hu] címre, benne néhány mondat mellett az IdP metaadatának URL-jével (https://example/org/simplesaml/module.php/saml/idp/metadata)
 +
* Ha minden rendben megy, akkor az IdP bekerül a [[Resource_Registry]]-be, ezáltal a föderációs metaadatba is.
 +
* Az előző pontban leírt módon be kell állítani a központi metadata feldolgozását.
 +
* Amennyiben a föderációs metaadatban már szerepel a mi IdP-nk is, úgy a föderáció valamelyik, tesztelési célokat szolgáló SP-jénél ki is próbálhatjuk a bejelentkezést.
 +
 
 +
:'''Fontos''', hogy a föderációs Discovery Service óránként generálja újra az IdP-k listáját, így ennyi idő mindenképp szükséges, hogy az új IdP megjelenjen itt, az egyes SP-k pedig két óránként töltik újra a metaadatot, így előfordulhat, hogy azonnal nem fog minden működni, de néhány óra alatt várhatóan beindul. :)
 +
 
 +
:Tesztelésre használható oldal: https://attributes.eduid.hu
 +
 
 +
* Ahhoz, hogy a Resource Registry-be is be tudjunk lépni és az IdP további, a föderációra vonatkozó beállításait meg tudjuk ejteni, ehhez az IdP-nek ki kell adnia az alábbi attribútumokat:
 +
** [[HREFAttributeSpec#mail|mail]] - ez belépés után, manuálisan is beállítható
 +
** [[HREFAttributeSpec#eduPersonPrincipalName|eduPersonPrincipalName]]
 +
** <del>[[HREFAttributeSpec#schacHomeOrganizationType|schacHomeOrganizationType]]</del> (az attribútumot hamarosan kivezetjük a kötelező attribútumok közül)
 +
** [[HREFAttributeSpec#eduScopedAffiliation|eduPersonScopedAffiliation]]
 +
 
 +
 
 +
====Attribútumok kezelése====
 +
Beállított IdP-nk alapértelmezés szerint azokat az attribútumokat adja ki, melyeket a metaadat alapján az SP kért (Lásd a metadatában a RequestedAttribute elemeket), és egyúttal alapból meg tudta szerezni a felhasználói adatbázisból, esetünkben az LDAP-ból. Mivel néhány attribútum nem szerepel az LDAP-ban, hanem az IdP-ben kell előállítani, így pár helyen módosítanunk kell az alapértelmezett konfiguráción.
 +
 
 +
A <code>metadata/saml20-idp-hosted.php</code> fájlba szerkesszük be az alábbi kódrészlet értelemszerűen módosított változatát. Az <code>'auth' => 'example-ldap',</code> sor alatt kezdjük. Fontos, hogy egyúttal a config.php <code>authproc.idp</code> részét kikommentezzük, nehogy az ottani sorszámokkal megadott default feladatok bekavarjanak.
 +
 
 +
<source lang="php">
 +
'AttributeNameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
 +
'userid.attribute' => 'uid', // Itt adjuk meg, hogy mely, az LDAPból származó attribútum alapján fogja az IdP kiszámítani az eduPersonTargetedID-t
 +
'authproc' => array(
 +
                10 => array(
 +
                        'class' => 'core:AttributeMap',
 +
                        'uid' => 'eduPersonPrincipalName'
 +
                //Itt az 'uid' az az attribútum az LDAP-ban, amely a felhasználó azonosítóját tartalmazza, mert ebből képezzük az eduPersonPrincipalName-t.
 +
                ),
 +
                # 20 => array(
 +
                #        'class' => 'core:AttributeAdd',
 +
                #        'schacHomeOrganizationType' => array('urn:schac:homeOrganizationType:hu:university')
 +
                # //Kötelező statikus attribútum az [[HREFAttributeSpec#schacHomeOrganizationType|intézmény jellegének]] megfelelően
 +
                # ),
 +
                30 => array(
 +
                        'class' => 'core:AttributeAlter',
 +
                        'subject' => 'eduPersonPrincipalName',
 +
                        'pattern' => '/^.*$/',
 +
                        'replacement' => '${0}@intezmenydomain.hu',
 +
                // Itt adjuk hozzá az intézményi scope-ot az eduPersonPrincipalName már meglévő értékéhez
 +
                ),
 +
                40 => array(
 +
                        'class' => 'core:AttributeAlter',
 +
                        'subject' => 'eduPersonAffiliation',
 +
                        'pattern' => '/^.*$/',
 +
                        'replacement' => '${0}@intezmenydomain.hu',
 +
                // Itt adjuk hozzá az intézményi scope-ot az eduPersonAffiliation már meglévő értékéhez
 +
                ),
 +
                50 => array(
 +
                        'class' => 'core:AttributeMap',
 +
                        'eduPersonAffiliation' => 'eduPersonScopedAffiliation'
 +
                // Az LDAP-ból eduPersonAffiliation-ként érkező attribútumból föderációs elvárásoknak megfelelően eduPersonScopedAffiliationt készítünk
 +
                ),
 +
                60 => array(
 +
                        'class' => 'core:AttributeAdd',
 +
                        'eduPersonScopedAffiliation' => array('member@intezmenydomain.hu')
 +
                // Az eduPersonScopedAffiliation-ben tesztelés céljából kiadhatjuk member értéket,
 +
                // így ha LDAP-ból nem jön érték, akkor is láthatjuk, hogy működik az attribútum kiadás
 +
                ),
 +
                61 => array(
 +
                        'class' => 'core:TargetedID',
 +
                        'nameId' => TRUE,
 +
                ),
 +
              // Itt állítjuk be, hogy az IdP előállítson és kiadhasson állandóazonosítóként eduPersonTargetedID-t, ha kérik
 +
                70 => array('class' => 'core:AttributeMap',
 +
                        'name2oid'
 +
                // Az LDAP-os attribútum nevekből itt kreálunk szabványos urn:oid formátumúakat
 +
                ),
 +
                80 => 'core:AttributeLimit',
 +
              ), // .authproc
 +
      'simplesaml.nameidattribute' => 'eduPersonPrincipalName',
 +
      'attributeencodings' => array(
 +
              'urn:oid:1.3.6.1.4.1.5923.1.1.1.10' => 'raw',
 +
        ),
 +
        'sign.logout' => true
 +
</source>
 +
 
 +
 
 +
: További tudnivalók a [[Resource_Registry|Resource Registry-ről]], ill. a [[HREFAttributeSpec|Föderációs attribútum specifikációról]].
 +
 
 +
* Ha minden rendben ment, akkor a Resource Registry-ben regisztrált IdP-hez tartozó adminisztrációs jogok átkerülnek az IdP technikai gazdájához, s ezzel a folyamat kész is.
 +
 
 +
===SP===
 +
Amennyiben IdP-t is beállítottunk, és be is tudunk lépni a Resource Registry-be, úgy nincs más dolgunk, mint az RR-ben új SP-t hozzáadni a föderációhoz, amely a megfelelő átfutási idő után a föderáció minden tagjánál látható is lesz.
 +
 
 +
Ellenkező esetben (nincs IdP, és nem is tervezünk beállítani), akkor az IdP hozzáadásánál részletezett pontokon kell végig menni a metaadat betöltéséig, s a továbbiakat az említett e-mail címen megbeszélni.
 +
 
 +
 
 +
 
 +
====Attribútum scopeok használata====
 +
A HREF föderáció IdP-i ún. scopeolt attribútumokat is használnak. Ez a scopeolás azt jelenti, hogy minden egyes IdP csak a saját scopejában ad ki attribútumokat, és a Shibboleth SP-k ezt ellenőrzik is. A scope és az attribútum valódi értéke egy '@' karakterrel kerül elválasztásra (ilyen attribútumok jelenleg: [[HREFAttributeSpec#eduPersonAffiliation|eduPersonScopedAffiliation]] illetve [[HREFAttributeSpec#eduPersonPrincipalName|eduPersonPrincipalName]]).
 +
 
 +
A SimpleSAMLphp alapértelmezett telepítése nem szűri a hibásan scopeolt értékeket. Kiegészítő modulként szűrésre használható az NIIF által fejlesztett [https://github.com/NIIF/simplesamlphp-module-attributescope attributescope modul], ami reményeink szerint rövid távon a hivatalos SimpleSAMLphp kiadás része lehet.
 +
 
 +
A telepítésről és konfigurációról bővebben itt lehet olvasni: https://github.com/NIIF/simplesamlphp-module-attributescope
 +
 
 +
: Az <code>attributescope</code> modul használata esetén a következőképp kell módosítani a <code>config/config.php</code> fájlt:
 +
<source lang="php">
 +
authproc.sp =  array(
 +
                      ...
 +
                    // 49 => array('class' => 'core:AttributeMap', 'oid2name'),
 +
                    50 => array(            'class' => 'attributescope:FilterAttributes'
 +
                    ),
 +
                    ...
 +
                ),
 +
</source>
 +
Figyeljünk arra, hogy mire a modulhoz ér a vezérlés, az attribútumok  nevei ''friendlyName'' alakúak legyenek (ne pedig ''oid''-ok). A  példában erre utal a 49-es sor.
 +
 
 +
[[Category: AAI]] [[Category: simpleSAMLphp]] [[Category: HOWTO]]

A lap jelenlegi, 2024. augusztus 13., 11:49-kori változata

Az alábbi lapon megkíséreljük összefoglalni a legfontosabb lépéseket, melyek általános esetben elegendőek ahhoz, hogy működő SimpleSAMLphp (SSP) alkalmazást állítsunk üzembe.

Telepítés

Először is nagyvonalakban leírásra kerülnek az előkészületek ezt követően pedig maga a szoftver telepítése és beállítása.

Előkészületek

Ahhoz, hogy problémamentesen telepíthessük SSP alkalmazásunkat, az alábbi szoftverkomponenseknek kell működniük szerverünkön.

  • A következő könyvtárakat kiegészítőket telepíteni kell: wget openssl unzip build-essential libldap2-dev libldap-common
  • PHP futtatására alkalmas webszerver
  • PHP környezet (>=8.0)
  • A következő PHP kiterjesztéseket engedélyezni kell
    • posix, date , dom , fileinfo , filter , hash , json , libxml , mbstring , openssl , pcre , session , simplexml , sodium , SPL, zlib, ldap
    • Adatbázisból történő autentikáció esetén a megfelelő adatbázis-csatolót mysqli, pdo, pdo_mysql
    • RADIUS szerveren keresztül történő autentikáció esetén: radius
  • Információk, certek:
    • Bár a szoftver képes futni mariadb, és redis nélkül, ezek vagy hasonló megoldások használata éles környezetben ajánlott.
      • Amennyiben ezeket szándékozunk használni database connection stringgel kell rendelkezni, redis elérhetőséggel és jelszóval rendelkezni.
      • Az adatbázis szerkezetének kialakítása a használt moduloktól függ, a leggyakoribb a consent modul, ott van is dokumentáció az adatbázis inicializálásáról.
    • Szükséges 2 certpár, az egyik az apachenak a másik az SSP-nek ezutóbbi lehet önalárírt, és nem ajánlott ugyan azt használni.

Composer

A composer PHP csomagkezelőt is telepíteni kell (akár forrásból, akár csomagból), hogy telepíteni lehessen a SimpleSAMLphp futásához szükséges PHP library-ket.

Telepítés

Elvégezhető composerrel például a /var/ mappában:

composer create-project simplesamlphp/simplesamlphp:2.1.3

Mappaszerkezet módosítása:

mv simplesamlphp simplesamlphp-prod #Tetszőleges átnevezés
mkdir -p simplesamlphp-prod/cert
mkdir -p /var/simplesamlphp-prod/log/stats/
mkdir -p /var/simplesamlphp-prod/mdx-cache/
chown -R www-data:www-data /var/simplesamlphp-prod/mdx-cache/
chown -R www-data:www-data /var/simplesamlphp-prod/log/
chown -R www-data:www-data /var/simplesamlphp-prod/metadata/


Composerrel a szükséges modulok telepítése (például LDAP, REDIS, vagy consent):

composer require simplesamlphp/simplesamlphp-module-ldap:v2.3.2
composer require predis/predis:2.2.2
composer require simplesamlphp/simplesamlphp-module-consent:1.3.2

Ezzel a telepítés, és a szükséges kiegészítők telepítése megtörtént.


Apache konfigurálás

A webről csak a /var/simplesamlphp-prod/public könyvtárat kell elérni. Tilos a teljes simplesamlphp könyvtárat a DocumentRoot alá tenni!

Alias /simplesaml /var/simplesamlphp-prod/public
<Directory /var/simplesamlphp-prod/public>
  Require all granted
</Directory>

Simplesamlphp Alapbeállítások

Konfigurációs fájlok

Amennyiben korábbi verziókat használtunk,

jó megközelítés lehet diff segítségével ellenőrizni a különbségeket a korábbi config.php fileunk és a config.php.dist között.

Ha ilyennel nem rendelkezünk akkor lehet rögtön alapul venni a config.php.dist-et és hasonlóképp a metadata-templates mappát.

Konfigurációs fájlok szerkesztése

Baseurlpath beállítása

- Állítsuk be a baseurlpath opciót. Mutasson a telepítés URL-jére, ahol a SimpleSAMLphp elérhető:

'baseurlpath' => 'https://your.canonical.host.name/simplesaml/',

Adminisztrációs adatok beállítása
  • Az "admin" felhasználó jelszavát, mellyel webes felületen keresztül be tud lépni a települő SSP-be.
'auth.adminpassword'        => 'ujjelszotirdide',
  • Titkosítási feladatokhoz szükséges "salt", azaz véletlenszerűen összeálló karaktersorozat
'secretsalt' => 'randombytesinsertedhere',

A karaktersorozat előállításában segíthet az alábbi parancs:

tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo
  • Elérhetőségeket, amely adatok bekerülnek majd a generált metaadatba
'technicalcontact_name'     => 'Gipsz Jakab',
'technicalcontact_email'    => 'jakab.gipsz@example.org',
  • Nyelv és időzóna adatok
'language.default'      => 'hu',
'timezone' => 'Europe/Budapest',

Az alapadatok megadása után mentsük és zárjuk be a config.php-t.

Naplózás beállítása

Alapértelmezetten a SimpleSAMLphp a syslog-ba irányítja a naplózást.

Ha fájlba akarunk naplózni, akkor a megfelelő könyvtárhoz biztosítsunk írás jogot a webszerver felhasználónak, és ne felejtsünk el gondoskodni a naplófájlok rotálásáról!

  • Naplózási szint beállítása a config/config.php-ban
'debug' => array(
       'saml' => true,
       'backtraces' => true,
       'validatexml' => false,
),
'logging.level' => SimpleSAML\Logger::DEBUG,
'logging.handler' => 'file',

A "SimpleSAML\Logger::DEBUG" a legrészletesebb naplózási beállítás, éles rendszernél nem ajánlott csak hiba keresés esetén.


Modulok engedélyezése
'module.enable' => [
 'exampleauth' => true,
 'saml' => false, //
 'core' => null, // Alapértelmezett érték
 'ldap' => true, // 2.x verzióban külön telepíteni és engedélyezni kell az ldap modult.
 'admin' => true, // Ezt szükséges engedélyezni hogy elérhessük az adminisztrációs felületet
],
Tanúsítvány készítése

Nem ajánlott a SimpleSAMLphp-hoz és webszerverhez ugyanazt a tanúsítvány használni!

  • A SimpleSAMLphp alapértelmezetten a tanúsítványt a cert mappában keresi.
openssl req -new -newkey rsa:3072 -x509 -days 3652 -nodes -out cert/saml-example-org.crt -keyout cert/saml-example-org.key

A fingerprint az alábbi módon kérdezhető le a legegyszerűbben

openssl x509 -fingerprint -noout -in cert/saml-example-org.crt

Telepítés kész

Amennyiben elkészültünk a fenti lépésekkel, úgy a https://service.example.org/simplesaml/admin címen elérjük a telepített SSP-nk webes adminfelületét.

Identity Provider (IdP) beállítás

Alapbeállítások

IdP engedélyezése: a config/config.php fájlban kell a saml20 idp-t "true"-re állítani.

'enable.saml20-idp' => true,

Metaadat alapok

A beállítandó IdP alapvető paraméterei a metadata/saml20-idp-hosted.php fájlban állíthatók. Az alábbi kódrészlet egy minimális, de már működő példát mutat.

 <?php
 $metadata['https://example.org/saml-idp'] = [
    /*
     * The hostname for this IdP. This makes it possible to run multiple
     * IdPs from the same configuration. '__DEFAULT__' means that this one
     * should be used by default.
     */
    'host' => '__DEFAULT__',
    /*
     * The private key and certificate to use when signing responses.
     * These can be stored as files in the cert-directory or retrieved
     * from a database.
     */
    'privatekey' => 'example.org.pem',
    'certificate' => 'example.org.crt',
    /*
     * The authentication source which should be used to authenticate the
     * user. This must match one of the entries in config/authsources.php.
     */
    'auth' => 'example-ldap',
 ];

A fentebb hivatkozott certeket korábban létrehoztuk, de az example-ldap auth forrást még nem:

LDAP autentikáció

Javasolt az LDAP-ban egy olyan bejegyzést létrehozni az IdP számára, amely olvasni tudja a felhasználóknak a föderációban használt attribútumait. Az azonosítás alapértelmezett módon a felhasználó nevében történő újra bind-olással történik, így a jelszóhoz nem kell hozzáférést adni.

Ahhoz, hogy megadhassuk az LDAP-hoz tartozó beállításokat, a config/authsources.php fájlt kell szerkesztenünk. Az alábbi kódrészletet elegendő beszúrni, és az egyes változóknak a helyi LDAP-nak megfelelő adatokat értékül adni.

'example-ldap' => [
        'ldap:Ldap',

        /**
         * The connection string for the LDAP-server.
         * You can add multiple by separating them with a space.
         */
        'connection_string' => 'ldap.example.org',

        /**
         * Whether SSL/TLS should be used when contacting the LDAP server.
         * Possible values are 'ssl', 'tls' or 'none'
         */
        'encryption' => 'ssl',

        /**
         * The LDAP version to use when interfacing the LDAP-server.
         * Defaults to 3
         */
        'version' => 3,

        /**
         * Set to TRUE to enable LDAP debug level. Passed to the LDAP connector class.
         *
         * Default: FALSE
         * Required: No
         */
        'debug' => false,

        /**
         * The LDAP-options to pass when setting up a connection
         * See [Symfony documentation]
         */
        'options' => [
            /**
             * Set whether to follow referrals.
             * AD Controllers may require 0x00 to function.
             * Possible values are 0x00 (NEVER), 0x01 (SEARCHING),
             *   0x02 (FINDING) or 0x03 (ALWAYS).
             */
            'referrals' => 0x00,

            'network_timeout' => 3,
        ],

        /**
         * The connector to use.
         * Defaults to '\SimpleSAML\Module\ldap\Connector\Ldap', but can be set
         * to '\SimpleSAML\Module\ldap\Connector\ActiveDirectory' when
         * authenticating against Microsoft Active Directory. This will
         * provide you with more specific error messages.
         */
        'connector' => '\SimpleSAML\Module\ldap\Connector\Ldap',

        /**
         * Which attributes should be retrieved from the LDAP server.
         * This can be an array of attribute names, or NULL, in which case
         * all attributes are fetched.
         */
        'attributes' => null,

        /**
         * Which attributes should be base64 encoded after retrieval from
         * the LDAP server.
         */
        'attributes.binary' => [
            'jpegPhoto',
            'objectGUID',
            'objectSid',
            'mS-DS-ConsistencyGuid'
        ],

        /**
         * The pattern which should be used to create the user's DN given
         * the username. %username% in this pattern will be replaced with
         * the user's username.
         *
         * This option is not used if the search.enable option is set to TRUE.
         */
        'dnpattern' => 'uid=%username%,ou=people,dc=example,dc=org',

        /**
         * As an alternative to specifying a pattern for the users DN, it is
         * possible to search for the username in a set of attributes. This is
         * enabled by this option.
         */
        'search.enable' => false,

        /**
         * An array on DNs which will be used as a base for the search. In
         * case of multiple strings, they will be searched in the order given.
         */
        'search.base' => [
            'ou=people,dc=example,dc=org',
        ],

        /**
         * The scope of the search. Valid values are 'sub' and 'one' and
         * 'base', first one being the default if no value is set.
         */
        'search.scope' => 'sub',

        /**
         * The attribute(s) the username should match against.
         *
         * This is an array with one or more attribute names. Any of the
         * attributes in the array may match the value the username.
         */
        'search.attributes' => ['uid', 'mail'],

        /**
         * Additional filters that must match for the entire LDAP search to
         * be true.
         *
         * This should be a single string conforming to [RFC 1960]
         * and [RFC 2544]. The string is appended to the search attributes
         */
        'search.filter' => '(&(objectClass=Person)(|(sn=Doe)(cn=John *)))',

        /**
         * The username & password where SimpleSAMLphp should bind to before
         * searching. If this is left NULL, no bind will be performed before
         * searching.
         */
        'search.username' => null,
        'search.password' => null,
    ],

Megfelelő beállítások után a dinamikusan generált metadata a /saml2/idp/metadata.php útvonalon érhető el.

Tesztelés

A usereknek már nincs adminisztrációs felület azonban adminként még be lehet lépni amennyiben a core modulok között engedélyeztük az admin felületet: `https://service.example.org/simplesaml/admin/`

A belépést követően a teszt fülre kattintva tesztelhetjük az authentikációs forrásokat:

https://idp.niif.hu/simplesaml/module.php/admin/test

Kézi metadata csere, élesített SP-vel

Az IdP metadata valamint metadata eszközök megtalálhatók a következő oldalon (admin fiók szükséges): [1](https://idp.example/simplesaml/module.php/admin/federation)

Amennyiben az SP is simplesamlphp használhatjuk a fentihez hasonló elérési úton található SimplesSAMLphp SP Metadatát, ez php formátumban van, ellenkező esetben pl shibboleth sp meg kell keresnünk a metaadat XML-t majd a fentebb említett federation oldalon található XML →simplesamlphp metadata konvertert használni.

Az így kapott php formátumú metaadatokat pedig be kell illeszteni az IdP-n a metadata/saml20-sp-remote.php fileba a következő példához hasonlóképp:

<?php

$metadata['https://sp.example.org/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = [
    'AssertionConsumerService' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
    'SingleLogoutService' => 'https://sp.example.org/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
];

A másik (SP) oldalon amennyiben szintén simplesamlphp van, az idp metaadatokat hasonlóképp hasonlóképp érjük el majd illesszük be a metadata/saml20-idp-remote.php fileba.


<?php
$metadata['https://example.org/saml-idp'] = [
    'SingleSignOnService'  => 'https://example.org/simplesaml/saml2/idp/SSOService.php',
    'SingleLogoutService'  => 'https://example.org/simplesaml/saml2/idp/SingleLogoutService.php',
    'certificate'          => 'example.pem',
];

A certet a config php-ban beállított certdir-ben keresi (alapértelmezetten /cert) Amennyiben más SP-t használunk az idp XML metadatájára lesz szükség amely szintén föderáció fül alatt érhető el ([2](https://idp.niif.hu/simplesaml/module.php/admin/federation)), és az SPn-nek releváns dokumentációt kell követni.

Service Provider (SP) beállítás

Alapbeállítások

A telepített alkalmazásunk által kezelt SP-ket a config/authsources.php fájlban tudjuk beállítani. A SimpleSAMLphp a tanúsítvány fájlokat a korábban létrehozott cert mappában fogja keresni, a fájlokat elég relatív elérési úttal megadni.

<?php
$config = [

    /* This is the name of this authentication source, and will be used to access it later. */
    'default-sp' => [
        'saml:SP',
        'entityID' => 'https://myapp.example.org/',
        'privatekey' => 'saml.pem',
        'certificate' => 'saml.crt',
        'idp' => 'https://example.org/saml-idp', //Alapértelmezett IdP beállítása
    ],

];


Tesztelés

A fent elvégzett alapbeállítások után már tudjuk tesztelni a, hogy a felépített IdP - SP kapcsolat működik-e.

SP oldalon nyissuk meg a admin teszt felületet:

https://idp.niif.hu/simplesaml/module.php/admin/test

Itt kattintsunk a default SP-re

HREF-integráció

Metadata beállítása (IdP és SP is)

Javasolt dinamikus metaadatforrást (MDX) használni, opcionálisan kiegészítve statikus állományokkal. Részletes leírás itt: SimpleSAMLMixedMetadata

IdP

Amennyiben van SSP alapú IdP-nk, melyet szeretnénk a föderáció részévé tenni, úgy a teendők a következők.

  • (Az adminisztratív teendőktől itt most eltekintünk, a csatlakozás folyamata itt van leírva)
  • Kell küldeni egy levelet a info@eduid.hu címre, benne néhány mondat mellett az IdP metaadatának URL-jével (https://example/org/simplesaml/module.php/saml/idp/metadata)
  • Ha minden rendben megy, akkor az IdP bekerül a Resource_Registry-be, ezáltal a föderációs metaadatba is.
  • Az előző pontban leírt módon be kell állítani a központi metadata feldolgozását.
  • Amennyiben a föderációs metaadatban már szerepel a mi IdP-nk is, úgy a föderáció valamelyik, tesztelési célokat szolgáló SP-jénél ki is próbálhatjuk a bejelentkezést.
Fontos, hogy a föderációs Discovery Service óránként generálja újra az IdP-k listáját, így ennyi idő mindenképp szükséges, hogy az új IdP megjelenjen itt, az egyes SP-k pedig két óránként töltik újra a metaadatot, így előfordulhat, hogy azonnal nem fog minden működni, de néhány óra alatt várhatóan beindul. :)
Tesztelésre használható oldal: https://attributes.eduid.hu
  • Ahhoz, hogy a Resource Registry-be is be tudjunk lépni és az IdP további, a föderációra vonatkozó beállításait meg tudjuk ejteni, ehhez az IdP-nek ki kell adnia az alábbi attribútumokat:


Attribútumok kezelése

Beállított IdP-nk alapértelmezés szerint azokat az attribútumokat adja ki, melyeket a metaadat alapján az SP kért (Lásd a metadatában a RequestedAttribute elemeket), és egyúttal alapból meg tudta szerezni a felhasználói adatbázisból, esetünkben az LDAP-ból. Mivel néhány attribútum nem szerepel az LDAP-ban, hanem az IdP-ben kell előállítani, így pár helyen módosítanunk kell az alapértelmezett konfiguráción.

A metadata/saml20-idp-hosted.php fájlba szerkesszük be az alábbi kódrészlet értelemszerűen módosított változatát. Az 'auth' => 'example-ldap', sor alatt kezdjük. Fontos, hogy egyúttal a config.php authproc.idp részét kikommentezzük, nehogy az ottani sorszámokkal megadott default feladatok bekavarjanak.

 'AttributeNameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
 'userid.attribute' => 'uid', // Itt adjuk meg, hogy mely, az LDAPból származó attribútum alapján fogja az IdP kiszámítani az eduPersonTargetedID-t
 'authproc' => array(
                10 => array(
                        'class' => 'core:AttributeMap',
                        'uid' => 'eduPersonPrincipalName'
                //Itt az 'uid' az az attribútum az LDAP-ban, amely a felhasználó azonosítóját tartalmazza, mert ebből képezzük az eduPersonPrincipalName-t.
                ),
                # 20 => array(
                #         'class' => 'core:AttributeAdd',
                #         'schacHomeOrganizationType' => array('urn:schac:homeOrganizationType:hu:university')
                # //Kötelező statikus attribútum az [[HREFAttributeSpec#schacHomeOrganizationType|intézmény jellegének]] megfelelően
                # ),
                30 => array(
                        'class' => 'core:AttributeAlter',
                        'subject' => 'eduPersonPrincipalName',
                        'pattern' => '/^.*$/',
                        'replacement' => '${0}@intezmenydomain.hu',
                // Itt adjuk hozzá az intézményi scope-ot az eduPersonPrincipalName már meglévő értékéhez
                ),
                40 => array(
                        'class' => 'core:AttributeAlter',
                        'subject' => 'eduPersonAffiliation',
                        'pattern' => '/^.*$/',
                        'replacement' => '${0}@intezmenydomain.hu',
                // Itt adjuk hozzá az intézményi scope-ot az eduPersonAffiliation már meglévő értékéhez
                ),
                50 => array(
                        'class' => 'core:AttributeMap',
                        'eduPersonAffiliation' => 'eduPersonScopedAffiliation'
                // Az LDAP-ból eduPersonAffiliation-ként érkező attribútumból föderációs elvárásoknak megfelelően eduPersonScopedAffiliationt készítünk
                ),
                60 => array(
                        'class' => 'core:AttributeAdd',
                        'eduPersonScopedAffiliation' => array('member@intezmenydomain.hu')
                // Az eduPersonScopedAffiliation-ben tesztelés céljából kiadhatjuk member értéket, 
                // így ha LDAP-ból nem jön érték, akkor is láthatjuk, hogy működik az attribútum kiadás 
                ),
                61 => array(
                        'class' => 'core:TargetedID',
                        'nameId' => TRUE,
                ),
               // Itt állítjuk be, hogy az IdP előállítson és kiadhasson állandóazonosítóként eduPersonTargetedID-t, ha kérik
                70 => array('class' => 'core:AttributeMap',
                        'name2oid'
                // Az LDAP-os attribútum nevekből itt kreálunk szabványos urn:oid formátumúakat
                ),
                80 => 'core:AttributeLimit',
              ), // .authproc
       'simplesaml.nameidattribute' => 'eduPersonPrincipalName',
       'attributeencodings' => array(
               'urn:oid:1.3.6.1.4.1.5923.1.1.1.10' => 'raw',
        ),
        'sign.logout' => true


További tudnivalók a Resource Registry-ről, ill. a Föderációs attribútum specifikációról.
  • Ha minden rendben ment, akkor a Resource Registry-ben regisztrált IdP-hez tartozó adminisztrációs jogok átkerülnek az IdP technikai gazdájához, s ezzel a folyamat kész is.

SP

Amennyiben IdP-t is beállítottunk, és be is tudunk lépni a Resource Registry-be, úgy nincs más dolgunk, mint az RR-ben új SP-t hozzáadni a föderációhoz, amely a megfelelő átfutási idő után a föderáció minden tagjánál látható is lesz.

Ellenkező esetben (nincs IdP, és nem is tervezünk beállítani), akkor az IdP hozzáadásánál részletezett pontokon kell végig menni a metaadat betöltéséig, s a továbbiakat az említett e-mail címen megbeszélni.


Attribútum scopeok használata

A HREF föderáció IdP-i ún. scopeolt attribútumokat is használnak. Ez a scopeolás azt jelenti, hogy minden egyes IdP csak a saját scopejában ad ki attribútumokat, és a Shibboleth SP-k ezt ellenőrzik is. A scope és az attribútum valódi értéke egy '@' karakterrel kerül elválasztásra (ilyen attribútumok jelenleg: eduPersonScopedAffiliation illetve eduPersonPrincipalName).

A SimpleSAMLphp alapértelmezett telepítése nem szűri a hibásan scopeolt értékeket. Kiegészítő modulként szűrésre használható az NIIF által fejlesztett attributescope modul, ami reményeink szerint rövid távon a hivatalos SimpleSAMLphp kiadás része lehet.

A telepítésről és konfigurációról bővebben itt lehet olvasni: https://github.com/NIIF/simplesamlphp-module-attributescope

Az attributescope modul használata esetén a következőképp kell módosítani a config/config.php fájlt:
 authproc.sp =  array(
                      ...
                     // 49 => array('class' => 'core:AttributeMap', 'oid2name'),
                     50 => array(             'class' => 'attributescope:FilterAttributes'
                     ),
                     ...
                ),

Figyeljünk arra, hogy mire a modulhoz ér a vezérlés, az attribútumok nevei friendlyName alakúak legyenek (ne pedig oid-ok). A példában erre utal a 49-es sor.