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 perfette di implementare l'autenticazione autorizzazione via SAML in un qualsiasi script PHP.
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
Documentazione: http://simplesamlphp.org/docs/stable/simplesamlphp-sp
# cd metadata/ # wget -O saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.simplesamlphp.txt
# cd metadata/ # wget -O saml20-idp-remote.php https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.simplesamlphp.txt
'auth.adminpassword
''secretsalt
'. Si può generare con il comando # head -c 2048 /dev/urandom | sha256sum
'technicalcontact_email
''authproc.sp' ⇒ array(
10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ), 10 => array( 'class' => 'core:AttributeMap', 'oid2name' ),
61 ⇒ array('class' ⇒ 'core:AttributeAdd'…
# 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/
'idp' ⇒ 'https://idp.infn.it/saml2/idp/metadata.php',
'idp' ⇒ 'https://idp.infn.it/testing/saml2/idp/metadata.php',
'discoURL' ⇒ NULL,
// Certificates 'privatekey' => 'saml.key', 'certificate' => 'saml.crt', 'redirect.sign' => TRUE, 'redirect.validate' => TRUE,
</VirtualHost>
, inserire:Alias /simplesaml /var/simplesamlphp/www <Directory "/var/simplesamlphp/www"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
# /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.
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>
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
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
Modificare il file: /etc/shibboleth/shibboleth2.xml
sp.example.org
con l'hostname del SPsigning="false"
con signing="true"
idp.example.org/shibboleth
con idp.infn.it/saml2/idp/metadata.php
oppure con idp.infn.it/testing/saml2/idp/metadata.php
per l'IdP di test.<AttributeExtractor…
inserire <MetadataProvider type="XML" file="idp.infn.it-metadata.xml"/>
<AttributeExtractor…
inserire <MetadataProvider type="XML" path="idp.infn.it-metadata.xml"/>
# wget -O /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-prod-metadata.xml.txt
# wget -O /etc/shibboleth/idp.infn.it-metadata.xml https://idp.infn.it/metadata/idp.infn.it-idp_saml20-test-metadata.xml.txt
# wget -O /etc/shibboleth/attribute-map.xml http://wiki.infn.it/_media/cn/ccr/aai/howto/attribute-map.xml
# /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