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/).