====== Joomla!: Configurare l'accesso SAML 2.0 con Joomla! 3.x ======
Reference: https://support.onelogin.com/hc/en-us/articles/201173564-Configuring-SAML-for-Joomla
Questa guida si applica a **Joomla! >= 3.3.x**
===== Download dei pacchetti =====
* Scaricare il plugin da https://baltig.infn.it/sysinfo/onelogin_infn_library/raw/master/plg_user_oneloginsaml.zip e installarlo
* Scaricare la libreria da https://baltig.infn.it/sysinfo/onelogin_infn_library/raw/master/onelogin.zip ed installarla
* Scaricare il modulo da https://baltig.infn.it/sysinfo/onelogin_infn_library/raw/master/mod_aai_login.zip ed installarlo
===== Configurazione del Plugin =====
* Accedere al pannello di configurazione di Joomla e quindi al menu **Estensioni->Plugin**
* Cercare il plugin //Authentication - OneLogin SAML// e accedere alla pagina di configurazione del plugin
* Cliccare sul tab ** Identity Provider Settings**
* Inserire nel campo **IdP Entity Id**:
* https://idp.infn.it/saml2/idp/metadata.php (Produzione)
* https://idp.infn.it/testing/saml2/idp/metadata.php (Test)
* Inserire nel campo **Single Sign On Service Url**:
* https://idp.infn.it/saml2/idp/SSOService.php (Produzione)
* https://idp.infn.it/testing/saml2/idp/SSOService.php (Test)
* Inserire nel campo **Single Log Out Service Url**:
* https://idp.infn.it/saml2/idp/SingleLogoutService.php (Produzione)
* https://idp.infn.it/testing/saml2/idp/SingleLogoutService.php (Test)
* Inserire nel campo **X.509 Certificate**
IdP di Produzione:
MIIDtTCCAp2gAwIBAgIJAOU29OWoolW3MA0GCSqGSIb3DQEBBQUAMEUxFDASBgNVBAMTC2lkcC5pbmZuLml0MREwDwYDVQQLEwhJTkZOLUFBSTENMAsGA1UEChMESU5GTjELMAkGA1UEBhMCSVQwHhcNMTQwNDE0MTQ1NzI2WhcNNDEwODI5MTQ1NzI2WjBFMRQwEgYDVQQDEwtpZHAuaW5mbi5pdDERMA8GA1UECxMISU5GTi1BQUkxDTALBgNVBAoTBElORk4xCzAJBgNVBAYTAklUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxTXQ7OFlyqDxcDkdUgPXtKrHw2vUkKuGkEMpQrrK/PU/emzT13Jualti38jV4NTSBSIXc7P3PTTUsfnk3o+IAej1JKNlQ2klqFDvPiwl9sKFh4Pd66K0g6ebGunsRZtR5LJLMJrrqOhRiLZdAcJzB4RxZsqSYxz0EDw6S5r6w6Sgm4xiupviC9gINAzpTkjFR78dbJ7fDzvvVUXxPz1T4awL01RCt0s/05fHeWM1I4cPjoVSB0t6wzv0CfaWWlid3I6yyFWiFYeVGvn7eeqhvRckthumYOayL18Ri+S2vxYkDqDcY6b6y2OWYhFZ1VTosUoUBPhwXyCYYJ2wAmi2VwIDAQABo4GnMIGkMB0GA1UdDgQWBBROEkiqrjIVFsHZKsnYbh+xPNmilDB1BgNVHSMEbjBsgBROEkiqrjIVFsHZKsnYbh+xPNmilKFJpEcwRTEUMBIGA1UEAxMLaWRwLmluZm4uaXQxETAPBgNVBAsTCElORk4tQUFJMQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVIIJAOU29OWoolW3MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBALVVWVWP9nrWlmU37KbTE3kuqJWptGmaDS2uuOg5RN5lGevQvVu4cac23qaZZ+TN+b6WDXuhEfmVJzBYczxByVeGEvew0fHgRRMZLqST6j2gyb89qzNNFyTcyRZ/5Z7jXWjrnDp3pOLNvrr9BhVojoC2F7EYjSdddwq2pb++9FiHglwSTl5WV+V4ZuNUMemY8jzhqayOK6UuwdL61UE4dPGKnlCgMaiYVST86HkiqFh9oOJ8D6jtlk695pRaz1h3ajxwB9zOa2VAWEsi40P2tZIzY3ek25wTM2vuvHO4YsOmkAOxj2Wk/itj5MnK1tT0u840b61Q/j4SJGuKLe4Tzzg=
IdP di Test:
MIIDzTCCArWgAwIBAgIJAOECAK4a4wUSMA0GCSqGSIb3DQEBBQUAME0xHDAaBgNVBAMTE2lkcC5pbmZuLml0LXRlc3RpbmcxETAPBgNVBAsTCElORk4tQUFJMQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVDAeFw0xNDAxMTUxMDAwNTJaFw00MTA2MDExMDAwNTJaME0xHDAaBgNVBAMTE2lkcC5pbmZuLml0LXRlc3RpbmcxETAPBgNVBAsTCElORk4tQUFJMQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDVak4mMVfX5XD4ZVhJI8gWG8cS8fJy+TqTMC6bGMbuvRVgpwC9c1Wpjrtmx6Bc/1vETRrronpxHEwERMQh14CVatajCP7ptr+6NbeA5hdPkwt6wZoHsKQ3fPKi6iSjO0ri08rHD0ouCQC2FeF2QCnzdsW3Czp6pJGLDKySkB3fdKId6ZvrR5a/uR8ePZURol69hOxsyNzQuwU17x+k4UUvdkE1LCOYm4X/GXkbYWyLgazQvpspez/Ba/+QAtK1KUUOrVgIP9Tn/H//RFJHBJzpjQ4SevsE1gsDxXpJVPA2EKKBhglRjPpASETf0diaXIoYrGnRYaRfM3BcPAakXQ8CAwEAAaOBrzCBrDAdBgNVHQ4EFgQURnQboZrmM6KuN+D+Rb/hgHxbsSswfQYDVR0jBHYwdIAURnQboZrmM6KuN+D+Rb/hgHxbsSuhUaRPME0xHDAaBgNVBAMTE2lkcC5pbmZuLml0LXRlc3RpbmcxETAPBgNVBAsTCElORk4tQUFJMQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVIIJAOECAK4a4wUSMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADxY+9QU7RJLPbCpAt3beWi1k+z6wGmFvMhDJbzv4quPK39bKeGQQyBootuXo14/4zuCrifV7Y4GNro+DXXxlqmfG18Ds2jqAXpy6DyVfDLYR3LP/JlJiLbDWdP/dlzd/9/ukcJH2Vq2T9pOcyHKDex88oQQC0tKd8fsrhV0vXElSi6bBBXaqvrsTTJMfmYDgHYCxJO/yYP/vsILxDbmafbWPsrwhJxArOKzhIlc0uJOyN+zX4JYYfVS/xNibbhwW5I7v6tGl5ibp9W3AIfpFCjUXRW3NUzM52ht39TqVVaeKtuPZlnW2Seo3N+XRgOm8KElowp+YbfrBRje0CftFrc=
* Nel tab **Opzioni** attivare le prime tre linee (click su **Yes**) e selezionare **Username** alla quarta linea
* Nel tab **Attribute Mapping**
* Inserire nel campo **Name**:
* urn:oid:2.16.840.1.113730.3.1.241 (Produzione)
* urn:oid:2.5.4.3 (Test)
* Inserire nel campo **Username**:
* urn:oid:0.9.2342.19200300.100.1.1 (Produzione e Test)
* Inserire nel campo **E-Mail**
* urn:oid:0.9.2342.19200300.100.1.3 (Produzione e Test)
* Inserire nel campo **Groups**:
* urn:oid:1.3.6.1.4.1.5923.1.5.1.1 (Produzione e Test)
* Lasciare i campi nel tab **Group Mapping** così come sono
* Nel tab **Avanzate**
* Attivare tutti le linee (click su **Yes**) tranne
* //Encrypt nameID//
* //Reject Unencrypted Assertions//
* Inserire una stringa identificativa del sito web nel campo **Service Provider Entity Id** (ad es. sito_amministrazione)
* Generare con //OpenSSL// un certificato X.509 e una chiave privata per l'SP usando il comando:
openssl req -new -x509 -newkey rsa:2048 -days 3652 -nodes -out saml.crt -keyout saml.key -subj /CN=`hostname -f`/OU=SAML-SP/
* inserire il contenuto di //saml.crt// nel campo **Service Provider X.509 Certificate**
* inserire il contenuto di //saml.key// nel campo **Service Provider Private Key**
* Click su **Salva e Chiudi** in alto
===== Attivazione =====
* Attivare il plugin cliccando in corrispondenza della colonna **Stato** (deve apparire una spunta verde)
* Aggiungere il modulo
* Click su **Estensioni->moduli**
* Click su **Nuovo** in alto a sx
* Click su //AAI Login Module//
* Configurare i parametri di posizione e visibilità e click su **Salva**
===== Invio dei metadati =====
* Accedere all'indirizzo http://path-di-joomla/plugins/user/oneloginsaml/oneloginsaml.php?metadata e visualizzare il **sorgente** della pagina (ignorare eventuali errori sull'XML)
* Copiare il sorgente dell'XML e incollarlo in questa pagina https://idp.infn.it/utils/metadata-send.php nel campo **or XML Metadata**
* **Attenzione !**: il tag //md:EntityDescriptor// contiene l'attributo **validUntil** che per default è impostato a pochi giorni di distanza dal giorno attuale
modifcare questo attributo con una data più in là nel tempo per evitare che i metadati **scadano** rendendo inutilizzabile l'SP
* Selezionare l'IdP (Produzione/Testing), selezionare il Set di Attributi **Esteso** e inserire una descrizione dell'SP
* Click su **Send SAML metadata for approval**
===== Test del sistema =====
* Una volta ricevuta conferma dell'inserimento dei metadati è possibile testare il sistema
* Click su **Login**, nel frontend del sito, in corrispondenza del modulo di Login AAI
* Autenticarsi sulla maschera di login INFN-AAI (se ci sono errori SAML verificare che i metadati siano stati inseriti)
* Se l'autenticazione va a buon fine...
* il plugin creerà (se non già presente) un nuovo utente utilizzando l'**uid** LDAP come username e i campi **cn** e **mail**
* successivamente, caricherà i gruppi della persona autenticata mappandoli sui gruppi di Joomla e associandoli all'utente Joomla
* la creazione dei gruppi richiede qualche decimo di secondo e i primi login potrebbero impiegare qualche secondo prima di mostrare nuovamente il sito
* Ogni gruppo viene mappato su una struttura a due livelli: ad es., per il gruppo **i:infn:sezione:servizio::tipo_ruolo:ruolo**
* sarà creato (se non già presente) un primo gruppo per il //nodo// corrispondente in GODiVA: **i:infn:sezione:servizio**
* ...e sotto di esso (se non già presente) un secondo gruppo **i:infn:sezione:servizio::tipo_ruolo:ruolo** per il //ruolo// specifico
* L'utente avrà membership su entrambi i gruppi e così facendo sarà possibile identificare tutti gli afferenti ad uno stesso //nodo// indipendentemente dal //ruolo//
* Ad ogni login tutte le membership sono cancellate (ma **non** i relativi gruppi) e riassegnate in base ai gruppi ricevuti dall'IdP
* A partire dai gruppi sarà possibile definire diversi //Livelli di visibilità// per contenuti e menu