====== 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