User Tools

Site Tools


cn:ccr:aai:howto:joomla

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cn:ccr:aai:howto:joomla [2017/09/07 15:35]
apaolett@infn.it
cn:ccr:aai:howto:joomla [2018/02/21 14:41] (current)
apaolett@infn.it
Line 1: Line 1:
 +====== 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:<code>
 +MIIDtTCCAp2gAwIBAgIJAOU29OWoolW3MA0GCSqGSIb3DQEBBQUAMEUxFDASBgNVBAMTC2lkcC5pbmZuLml0MREwDwYDVQQLEwhJTkZOLUFBSTENMAsGA1UEChMESU5GTjELMAkGA1UEBhMCSVQwHhcNMTQwNDE0MTQ1NzI2WhcNNDEwODI5MTQ1NzI2WjBFMRQwEgYDVQQDEwtpZHAuaW5mbi5pdDERMA8GA1UECxMISU5GTi1BQUkxDTALBgNVBAoTBElORk4xCzAJBgNVBAYTAklUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxTXQ7OFlyqDxcDkdUgPXtKrHw2vUkKuGkEMpQrrK/PU/emzT13Jualti38jV4NTSBSIXc7P3PTTUsfnk3o+IAej1JKNlQ2klqFDvPiwl9sKFh4Pd66K0g6ebGunsRZtR5LJLMJrrqOhRiLZdAcJzB4RxZsqSYxz0EDw6S5r6w6Sgm4xiupviC9gINAzpTkjFR78dbJ7fDzvvVUXxPz1T4awL01RCt0s/05fHeWM1I4cPjoVSB0t6wzv0CfaWWlid3I6yyFWiFYeVGvn7eeqhvRckthumYOayL18Ri+S2vxYkDqDcY6b6y2OWYhFZ1VTosUoUBPhwXyCYYJ2wAmi2VwIDAQABo4GnMIGkMB0GA1UdDgQWBBROEkiqrjIVFsHZKsnYbh+xPNmilDB1BgNVHSMEbjBsgBROEkiqrjIVFsHZKsnYbh+xPNmilKFJpEcwRTEUMBIGA1UEAxMLaWRwLmluZm4uaXQxETAPBgNVBAsTCElORk4tQUFJMQ0wCwYDVQQKEwRJTkZOMQswCQYDVQQGEwJJVIIJAOU29OWoolW3MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBALVVWVWP9nrWlmU37KbTE3kuqJWptGmaDS2uuOg5RN5lGevQvVu4cac23qaZZ+TN+b6WDXuhEfmVJzBYczxByVeGEvew0fHgRRMZLqST6j2gyb89qzNNFyTcyRZ/5Z7jXWjrnDp3pOLNvrr9BhVojoC2F7EYjSdddwq2pb++9FiHglwSTl5WV+V4ZuNUMemY8jzhqayOK6UuwdL61UE4dPGKnlCgMaiYVST86HkiqFh9oOJ8D6jtlk695pRaz1h3ajxwB9zOa2VAWEsi40P2tZIzY3ek25wTM2vuvHO4YsOmkAOxj2Wk/itj5MnK1tT0u840b61Q/j4SJGuKLe4Tzzg=
 +</code>
 +
 +IdP di Test:<code>
 +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=
 +</code>
 +
 +  * 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: <code>
 +openssl req -new -x509 -newkey rsa:2048 -days 3652 -nodes -out saml.crt -keyout saml.key -subj /CN=`hostname -f`/OU=SAML-SP/
 +</code>
 +      * 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
 +<code><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2017-09-13T08:49:57Z"...</code>
 +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