curl -o /tmp/idp.crt https://idp.infn.it/testing/module.php/saml/idp/certs.php/idp.crt
versione di produzione:
curl -o /tmp/idp.crt https://idp.infn.it/module.php/saml/idp/certs.php/idp.crt
generare il certificato e la chiave private da usare per questo SP:
openssl req -new -x509 -newkey rsa:2048 -days 3652 -nodes -out /tmp/saml.crt -keyout /tmp/saml.key -subj /CN=`hostname -f`/OU=SAML-SP/ ; chmod 400 /tmp/saml.key
** Fase 2.**
Utilizzando la dashborad di Wordpress installare e attivare il plugin **< rm -f /tmp/idp.crt /tmp/saml.key /tmp/saml.crt
Dopo aver ricevuto la mail di conferma da aai-support@infn.it, **aggiornare il ticket specificando che per questa richiesta devono essere inviati all’ SP i numeri OID e non i nomi.**
**Fase 4.**Ruoli e autorizzazione. Per consentire a Wordpress di associare un ruolo ad un utente occorre creare con Godiva la seguente struttura: //**G:INFN:SEDE:WP: ruolo:utente.**//
Accedere a Godiva e selezionare //**Domini -> Gestione Domini.**//
Selezionare //**Gruppi -> INFN -> Sede**//
Aggiungere il nodo **wp**, specificando:
* nome dominio: **wp**
* entry ldap: **wp**
* descrizione: **“Wordpress web site”**
All’ interno di questo nodo creare un ulteriore nodo per ogni ruolo di Wordpress:
* **admin**
* **author**
* **editor**
* **contrib**
* **subscr**
**Entry Ldap** deve avere lo stesso nome del nodo, mentre il valore da assegnare a **Codice** e’ **ENTITLEMENTS**.
Dopo aver creato tutti i nodi si possono aggiungere gli utenti. Di seguito un esempio relativo al ruolo di editor:
{{:cn:ccr:aai:howto:godiva_wp_ruolo.png?nolink&800|}}
**Fase 5.** Per completare la fase di autorizzazione e consentire l'accesso solo alle persone della propria sede occorre aggiungere una funzione che controlla l’indirizzo di posta
elettronica. Se è gia stato attivato un tema figlio, scelta consigliata, occorre modificare il file** ///HOME_WWW/wp-content/themes/wp-bootstrap-starter-child/functions.php//**
altrimenti si deve editare il file**// /HOME_WWW/wp-content/themes/wp-bootstrap-starter-child/functions.php//**.
Di seguito un esempio con le istruzioni PHP ad aggiungere:
/**
* Funzione per autorizzazione login tramite controllo sul campo mail
*/
function wp_user_mail_check($user_login, $user) {
$infndomain="*@SEDE.infn.it*";
$mail="$user->user_email";
$username="$user->user_login";
// inserire nell’array $localusers tutti gli utenti non presenti in AAI ma già definiti nel db locale di WP.
// Esempio:
$localusers[]="nome_utente_1";
$localusers[]="fnome_utente_2";
$localuser_wp="false";
// controllo se l'utente e' locale
foreach ( $localusers as $localuser ) {
if ( "$username" == "$localuser" ) {
$localuser_wp = "true";
}
}
// controllo mail per autorizzazione
if ( $localuser_wp == "false" && !(preg_match("$infndomain",$mail)) ) {
get_header();
echo "";
echo "ERRORE. L' utente $username, $mail, non è autorizzato ad accedere perchè non è afferente a questa struttura";
echo "
";
get_sidebar();
get_footer();
exit;
}
}
add_action( 'wp_login', 'wp_user_mail_check',10,2);
**Fase 6.** Personalizzazione della schermata di login di Wordpress.
Creare la directory **images** nel tema attivo, per esempio in **/HOME_WWW/wp-content/themes/wp-bootstrap-starter-child/images** oppure in **/HOME_WWW/wp-content/themes/wp-bootstrap-starter/images**. In questa directory salvare il file {{:cn:ccr:aai:howto:site-login-logo.png?linkonly|}} con il logo di INFN AAI.
Nel file **functions.php** aggiungere le seguenti linee:
# Logo INFN-AAI nella pagina di login
function my_login_logo() { ?>
**Fase 7.** Accesso al sistema.
Quando saranno inseriti i metadati nell’IDP si potrà effettuare il login **https://NOME_HOST.SEDE.infn.it/wp-login.php**. Se l’accesso al sistema avverrà in modo corretto, verrà creato l’utente nel DB di Wordpress con il ruolo che e’ stato assegnato tramite Godiva.
**Link utili:**
//Onelogin SAML SSO, codice sorgente:// [[https://github.com/onelogin/wordpress-saml]]
//Onelogin SAML SSO, home page plugin:// [[https://it.wordpress.org/plugins/onelogin-saml-sso/]]
//Wordpress Login:// [[https://codex.wordpress.org/Customizing_the_Login_Form]]
//Wordpress tema figlio:// [[https://developer.wordpress.org/themes/advanced-topics/child-themes/]]
//Godiva:// [[https://wiki.infn.it/cn/ccr/aai/howto/godiva/godivajava]]
//Gestione delle autorizzazioni in godiva:// [[https://wiki.infn.it/cn/ccr/aai/howto/authz/home]]
--- //[[enrico.becchetti@pg.infn.it|Enrico Becchetti]] 2021/02/17 11:34//