Table of Contents
RHEL 5/6: Configurare un Service Provider SAML 2.0
ATTENZIONE: È disponibile la 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 <<EOT ; Enable json extension module extension = json.so EOT
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
</VirtualHost>
, inserire:
Alias /simplesaml /var/simplesamlphp/www <Directory "/var/simplesamlphp/www"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
**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:
<?php require_once('/var/simplesamlphp/lib/_autoload.php'); $as = new SimpleSAML_Auth_Simple('default-sp'); if ( $as->isAuthenticated() && $_REQUEST['logout'] ) { $as->logout(); } if ( !$as->isAuthenticated() && $_REQUEST['login'] ) { $as->requireAuth(); } echo "Hello World!\n"; if ( $as->isAuthenticated() ) { echo "You are authenticated<br>\n"; $attr = $as->getAttributes(); echo "<pre>"; print_r( $attr ); echo "</pre>"; } ?> <br> <a href="?login=yes">LOGIN</a><br> <a href="?logout=yes">LOGOUT</a><br>
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 <<EOT [security_shibboleth] name=Shibboleth (RHEL_6) type=rpm-md baseurl=http://download.opensuse.org/repositories/security:/shibboleth/RHEL_6/ gpgcheck=1 gpgkey=http://download.opensuse.org/repositories/security:/shibboleth/RHEL_6/repodata/repomd.xml.key enabled=1 priority=10 EOT
Installare:
yum install shibboleth.x86_64 httpd mod_ssl
Configurazione
Modificare il file: /etc/shibboleth/shibboleth2.xml
- Sostituire tutte le occorrenze di
sp.example.org
con l'hostname del SP - Sostituire tutte le occorrenze di
signing="false"
consigning="true"
- Sostituire
idp.example.org/shibboleth
conidp.infn.it/saml2/idp/metadata.php
oppure conidp.infn.it/testing/saml2/idp/metadata.php
per l'IdP di test. - Impostare handlerSSL="true" e cookieProps="https"
- Nela caso di shibboleth-2.0-native-sp prima del tag
<AttributeExtractor…
inserire
<MetadataProvider type="XML" file="idp.infn.it-metadata.xml"/>
- Nela caso di shibboleth-3.0-native-sp prima del tag
<AttributeExtractor…
inserire
<MetadataProvider type="XML" path="idp.infn.it-metadata.xml"/>
- 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