====== RHEL 5/6: Configurare un Service Provider SAML 2.0 ====== ---- **ATTENZIONE: È disponibile la [[cn:ccr:aai:howto:saml-sp-rhel7|guida aggiornata per RHEL 7]]** ---- La seguente guida illustra come configurare un'applicazione web per agganciarsi all'autenticazione fornita dall'Identity Provider SAML 2.0 dell'INFN (Identity Check) idp.infn.it. ===== simpleSAMLphp ===== simpleSAMLphp perfette di implementare l'autenticazione autorizzazione via SAML in un qualsiasi script PHP. ==== Installazione ==== La documentazione di trova alla pagina [[http://simplesamlphp.org/docs/stable/simplesamlphp-install]]. Il download è disponibile a [[https://simplesamlphp.org/download]]. # yum install httpd mod_ssl php php-xml # cd /var # wget -O - https://simplesamlphp.org/res/downloads/simplesamlphp-1.13.2.tar.gz | tar -xzvf - # mv simplesamlphp-1.13.2 simplesamlphp **NOTA**: In caso si usi php 5.1 eseguire anche: # yum install php-pear # pecl install json # cat > /etc/php.d/json.ini < ==== Configurazione ==== Documentazione: http://simplesamlphp.org/docs/stable/simplesamlphp-sp === **Scaricare i metadati dell'IdP nel file: ''metadata/saml20-idp-remote.php''** === == IdP di Produzione == # cd metadata/ # wget -O saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.simplesamlphp.txt == IdP di Test == # cd metadata/ # wget -O saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.simplesamlphp.txt === **Modificare il file: ''config/config.php''** === * Impostare la password per il frontend: '''auth.adminpassword''' * Impostare la chiave di cifratura interna: '''secretsalt'''. Si può generare con il comando ''# head -c 2048 /dev/urandom | sha256sum'' * Impostare l'indirizzo e-mail dell'amministratore: '''technicalcontact_email''' * Inserire il seguente codice dopo la riga: '''authproc.sp' => array('' 10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ), 10 => array( 'class' => 'core:AttributeMap', 'oid2name' ), * Commentare la linea: ''61 => array('class' => 'core:AttributeAdd'...'' === **Creare i certificati per SAML:** === # mkdir /var/simplesamlphp/cert # cd /var/simplesamlphp/cert/ # openssl req -new -x509 -newkey rsa:2048 -days 3652 -nodes -out saml.crt -keyout saml.key -subj /CN=`hostname -f`/OU=SAML-SP/ === **Modificare il file: ''config/authsources.php''** === * Impostare l'IdP di riferimento: * * **Produzione** '''idp' => '%%https://idp.infn.it/saml2/idp/metadata.php%%','' * * **Testing** '''idp' => '%%https://idp.infn.it/testing/saml2/idp/metadata.php%%','' * Aggiungere il seguente codice dopo la linea '''discoURL' => NULL,'' // Certificates 'privatekey' => 'saml.key', 'certificate' => 'saml.crt', 'redirect.sign' => TRUE, 'redirect.validate' => TRUE, === **Modificare il file ''/etc/httpd/conf.d/ssl.conf'':** === * Prima di '''', inserire: Alias /simplesaml /var/simplesamlphp/www Options FollowSymLinks AllowOverride None Order allow,deny Allow from all === **Far (ri)partire il web server** === # /etc/init.d/httpd start A questo punto è necessario **inviare i metadati del vostro SP** (''https://SP-HOSTNAME.FQDN/simplesaml/module.php/saml/sp/metadata.php/default-sp'') tramite l'apposito modulo: [[https://idp.infn.it/utils/metadata-send.php]]. ==== Codice PHP ==== All'interno del codice della vostra applicazione PHP potete inserire la chiamata alla libreria simpleSAMLphp. Documentazione: http://simplesamlphp.org/docs/stable/simplesamlphp-sp-api Un esempio semplice semplice: isAuthenticated() && $_REQUEST['logout'] ) { $as->logout(); } if ( !$as->isAuthenticated() && $_REQUEST['login'] ) { $as->requireAuth(); } echo "Hello World!\n"; if ( $as->isAuthenticated() ) { echo "You are authenticated
\n"; $attr = $as->getAttributes(); echo "
";
  print_r( $attr );
  echo "
"; } ?>
LOGIN
LOGOUT
===== Shibboleth SP ===== In caso si voglia implementare l'autenticazione con un semplice modulo di apache è possibile usare il SP Shibboleth. Documentazione: https://spaces.internet2.edu/display/SHIB2/Home ==== Installazione ==== Configurare il repository YUM: # cat > /etc/yum.repos.d/shibboleth.repo <
* Nela caso di shibboleth-3.0-native-sp prima del tag '' * Scaricare i metadati dell'IdP == IdP di Produzione == # wget -O /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.xml.txt == IdP di Test == # wget -O /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.xml.txt * Configurare il mapping degli attributi. Scaricate il file già pronto: # wget -O /etc/shibboleth/attribute-map.xml http://wiki.infn.it/_media/cn/ccr/aai/howto/attribute-map.xml * Far (ri)partire i servizi # /etc/init.d/shibd start # /etc/init.d/httpd start A questo punto è necessario **inviare i metadati del vostro SP** che trovate alla URL https://SP-HOSTNAME/Shibboleth.sso/Metadata tramite l'apposito modulo: [[https://idp.infn.it/utils/metadata-send.php]]. Per effettuare il logout utilizzare la URL: https://SP-HOSTNAME/Shibboleth.sso/Logout?return= La configurazione del modulo shibboleth di apache si trova nel file ''/etc/httpd/conf.d/shib.conf'', la cui documentazione è alla pagina https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPhtaccess