User Tools

Site Tools


cn:ccr:aai:howto:saml-sp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
cn:ccr:aai:howto:saml-sp [2019/04/30 11:17]
monducci@infn.it [Configurazione]
cn:ccr:aai:howto:saml-sp [2019/04/30 11:26] (current)
monducci@infn.it [Configurazione]
Line 1: Line 1:
 +====== 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:
 +  
 +<code>
 +# yum install php-pear
 +# pecl install json
 +# cat > /etc/php.d/json.ini <<EOT
 +; Enable json extension module
 +extension = json.so
 +EOT
 +
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +==== 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(''
 +<code php>
 +                10 => array( 'class' => 'core:AttributeMap', 'removeurnprefix' ),
 +                10 => array( 'class' => 'core:AttributeMap', 'oid2name' ),
 +</code>
 +
 +  * 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,''
 +<code php>
 +                // Certificates
 +                'privatekey' => 'saml.key',
 +                'certificate' => 'saml.crt',
 +                'redirect.sign' => TRUE,
 +                'redirect.validate' => TRUE,
 +</code>
 +
 +=== **Modificare il file ''/etc/httpd/conf.d/ssl.conf'':** ===
 +
 +  * Prima di ''</VirtualHost>'', inserire:
 +<code>
 +Alias /simplesaml /var/simplesamlphp/www
 +<Directory "/var/simplesamlphp/www">
 +  Options FollowSymLinks
 +  AllowOverride None
 +  Order allow,deny
 +  Allow from all
 +</Directory>
 +</code>
 +
 +
 +=== **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:
 +
 +<code php>
 +<?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>
 +
 +</code>
 +
 +
 +
 +
 +===== 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"'' con ''signing="true"''
 +  * Sostituire ''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.
 +  * Impostare handlerSSL="true" e cookieProps="https"
 +  * Nela caso di shibboleth-2.0-native-sp prima del tag ''<AttributeExtractor...'' inserire 
 +<code>
 +  <MetadataProvider type="XML" file="idp.infn.it-metadata.xml"/>
 +</code>
 +
 +  * Nela caso di shibboleth-3.0-native-sp prima del tag ''<AttributeExtractor...'' inserire 
 +<code>
 +  <MetadataProvider type="XML" path="idp.infn.it-metadata.xml"/>
 +</code>
 +
 +
 +
 +  * 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
cn/ccr/aai/howto/saml-sp.txt · Last modified: 2019/04/30 11:26 by monducci@infn.it