SAML authentikáció bevezetése új alkalmazásnál
==============================================
A SAML authentikációt a php alkalmazások oldalán a legegyszerűbben a SimpleSAMLphp termékkel végezhetjük.
A preferált módszer a SimpleSAMLphp composer modulként való telepítése.
Ha php alkalmazásunk nem használ [Composer](https://getcomposer.org) csomagkezelőt, akkor a SimpleSAMLphp telepítést manuálisan kell végezni a [gyári leírás]() alapján.
Lépések:
1. Futtassuk a `composer require simplesamlphp/simplesamlphp` parancsot.
2. Hozzuk létre a projektünk gyökerében egy `config/saml` nevű mappát. Itt fogjuk tárolni a simplesamlphp modul konfigurációját.
3. Hozzuk létre a projektünk gyökerében egy `runtime` nevű mappát. Itt fogjuk tárolni az alkalmazás, és ezen belül a simplesamlphp modul futásidejű adatait.
4. A virtuális hostban definiálni kell a `SIMPLESAMLPHP_CONFIG_DIR` változót, mely a fenti mappára mutat:
5. A `config/saml/config/config.php` fájlban helyezzük el a simplesamlphp konfigurációját. (Példa lejjebb)
6. A konfigurációban állítsuk be a szövetségi metaadat-terjesztés forrását (lásd lejjebb)
7. Amennyiben csak PTE beléptetés szükséges, adjuk meg a PTE IdP-t kizárólagos IdP-ként, egyébként használjuk a szövetségi discovery szolgáltatást. Részletek konkrét példával lejjebb.
#### Példa apache config részlet _simpleSAMLphp 1.x_ verzió esetén
```apacheconf
Alias /saml "/app/vendor/simplesamlphp/simplesamlphp/www"
SetEnv SIMPLESAMLPHP_CONFIG_DIR "/app/config/saml/config"
Options MultiViews FollowSymLinks
AllowOverride All
Require all granted
```
#### Példa apache config részlet _simpleSAMLphp 2.x_ verzió esetén
```apacheconf
Alias /saml "/app/vendor/simplesamlphp/simplesamlphp/public"
SetEnv SIMPLESAMLPHP_CONFIG_DIR "/app/config/saml/config"
Options MultiViews FollowSymLinks
AllowOverride All
Require all granted
```
#### Példa `config/saml/config/config.php` részlet
```php
dirname(__DIR__).'/cert/',
'metadatadir' => dirname(__DIR__).'/metadata/',
'loggingdir' => dirname(__DIR__, 2).'/runtime/logs/',
'datadir' => $dataDir.'/',
...
'metadata.sources' => [
[
'type' => 'flatfile'
],
[
'type' => 'mdx',
'server' => EnvHelper::getEnv('SAML_MDQ_SERVER', 'https://mdx.eduid.hu'),
'cachedir' => $dataDir.'/mdx-cache',
'cachelength' => 86400, //opcionális,
'validateFingerprint' => EnvHelper::getEnv('SAML_MDQ_FINGERPRINT', '91:81:AD:2B:F1:C1:4E:47:93:A2:9D:49:34:B7:77:62:4F:2F:98:43'),
'validateFingerprintAlgorithm' => EnvHelper::getEnv('SAML_MDQ_FINGERPRINT_ALGORITM', XMLSecurityDSig::SHA256), // 'http://www.w3.org/2001/04/xmlenc#sha256'
],
],
]
```
#### Példa `config/saml/config/authsources.php` részlet az IdP vagy discovery beállításhoz
```php
[
'saml:SP',
// The entity ID of this SP.
// Can be NULL/unset, in which case an entity ID is generated based on the metadata URL.
'entityID' => $baseUrl . '/sp',
'idp' => 'https://idp.pte.hu/saml2/idp/metadata.php', # Csak PTE beléptetés esetén (egyébként null)
'disco' => 'https://discovery.eduid.hu/', # EduID beléptetés esetén
'disco' => 'https://service.seamlessaccess.org/ds', # EduGAIN beléptetés esetén
'signature.algorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
'authproc' => [
91 => ['class' => 'core:AttributeMap', 'oid2name'],
],
],
```
Egy komplett működő, keretrendszer-független példaprojekt elérhető [itt](https://bitbucket.org/uhi67/samlsample1/src/master/).