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''**

                10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ),
                10 => array( 'class' => 'core:AttributeMap', 'oid2name' ),

**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''**

                // Certificates
                'privatekey' => 'saml.key',
                'certificate' => 'saml.crt',
                'redirect.sign' => TRUE,
                'redirect.validate' => TRUE,

**Modificare il file ''/etc/httpd/conf.d/ssl.conf'':**

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

  <MetadataProvider type="XML" file="idp.infn.it-metadata.xml"/>
  <MetadataProvider type="XML" path="idp.infn.it-metadata.xml"/>
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
# 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