Benutzer-Werkzeuge

Webseiten-Werkzeuge


simplesamlphp_dfn_aai

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
simplesamlphp_dfn_aai [2015/03/04 10:42]
2007
simplesamlphp_dfn_aai [2015/11/26 17:09] (aktuell)
2007 [ldap auth]
Zeile 1: Zeile 1:
-Stand: ​Januar 2013, simplesamlphp-1.10,​ www.simplesamlphp.org+Stand: ​März 2015, simplesamlphp-1.10,​ www.simplesamlphp.org
  
 ====== DFN-AAI, Bereitstellung eines IdP mit SimpleSAMLphp ====== ====== DFN-AAI, Bereitstellung eines IdP mit SimpleSAMLphp ======
Zeile 5: Zeile 5:
 Dieses Dokument beschreibt die Installation und Konfiguration eines Identity Provider (IdP) mit SimpleSAMLphp im Verbund der DFN-AAI. Dieses Dokument beschreibt die Installation und Konfiguration eines Identity Provider (IdP) mit SimpleSAMLphp im Verbund der DFN-AAI.
  
- 
-===== Hinweise ===== 
- 
-03. März 2015, parsing der xml-metafiles dfn-aai dauert sehr lange, bis zu 10min, fehlermeldung von php:  
- 
-  PHP Fatal error: ​ Maximum execution time of 600 seconds exceeded in /​var/​simplesamlphp/​lib/​xmlseclibs.php on line 770 
- 
-Ich hatte die max. exec time von php von ursprünlich 30sec schon auf 600sec erhöht. Dazu dieser Hinweis: 
- 
-https://​simplesamlphp.org/​metaprocessing 
- 
-aus 10min werden nach Austausch der xmlseclibs.php 5sec. 
  
  
Zeile 23: Zeile 11:
 RedHat EL 5 oder 6, simpleSAMLphp-1.10,​ php-5.3 RedHat EL 5 oder 6, simpleSAMLphp-1.10,​ php-5.3
  
-einfache Bereitstellung eines IdP '''​SAML2''' ​(shib1.3 sollte ähnlich einfach sein) mit Anbindung an das lokale ldap, Attribute werden aus vorhandenen Attributen erzeugt und in das geforderte Format überführt.+einfache Bereitstellung eines IdP '''​SAML2''' ​und '''​SAML1.1'''​ (shib13) mit Anbindung an das lokale ldap, Attribute werden aus vorhandenen Attributen erzeugt und in das geforderte Format überführt.
  
 Folgende Attribute werden bereitgestellt:​ Folgende Attribute werden bereitgestellt:​
Zeile 29: Zeile 17:
   * mail   * mail
   * sn   * sn
 +  * givenName
   * ou   * ou
   * eduPersonTargetedID   * eduPersonTargetedID
Zeile 34: Zeile 23:
   * eduPersonPrincipalName   * eduPersonPrincipalName
   * eduPersonScopedAffiliation   * eduPersonScopedAffiliation
 +  * eduPersonEntitlement
  
 Alle eduPerson-Attribute werden direkt oder indirekt aus vorhandenen LDAP-Attributen erzeugt oder befüllt. Alle eduPerson-Attribute werden direkt oder indirekt aus vorhandenen LDAP-Attributen erzeugt oder befüllt.
Zeile 48: Zeile 38:
  
 ==== Änderungen am Code ==== ==== Änderungen am Code ====
-=== Attribute aus LDAP ===+==== Attribute aus LDAP ====
  
 Ich brauche für die Attributfilter die DN des Nutzers. Und ich möchte nur die erste E-Mail-Adresse aus LDAP haben (bei uns ist das mail-attribut in ldap multivalued). Dazu habe ich folgende Zeilen in der Datei Ich brauche für die Attributfilter die DN des Nutzers. Und ich möchte nur die erste E-Mail-Adresse aus LDAP haben (bei uns ist das mail-attribut in ldap multivalued). Dazu habe ich folgende Zeilen in der Datei
Zeile 64: Zeile 54:
 ===== Konfiguration ===== ===== Konfiguration =====
  
-=== ldap auth ===+==== ldap auth ====
  
 '''​metadata/​saml20-idp-hosted.php'''​ '''​metadata/​saml20-idp-hosted.php'''​
  
 <code php> <code php>
-$metadata['​__DYNAMIC:1__'] = array( +$metadata['​https://​idp.fh-schmalkalden.de/​simplesaml'] = array( 
-        /* + /* 
-         ​* The hostname of the server (VHOST) that will use this SAML entity. +  * The hostname of the server (VHOST) that will use this SAML entity. 
-         ​+  
-         ​* Can be '​__DEFAULT__',​ to use this entry by default. +  * Can be '​__DEFAULT__',​ to use this entry by default. 
-         ​*/ +  */ 
-        '​host'​ => '​__DEFAULT__',​+ '​host'​ => '​__DEFAULT__',​
  
-        ​/* X.509 key and certificate. Relative to the cert directory. */ + /* X.509 key and certificate. Relative to the cert directory. */ 
-        '​privatekey'​ => '​idp.key',​ + '​privatekey'​ => '​idp.key',​ 
-        '​certificate'​ => '​idp.crt',​+ '​certificate'​ => '​idp.crt',​
  
-        ​/* + /* 
-         ​* Authentication ​code to use. Must be one that is configured in +  * Authentication ​source ​to use. Must be one that is configured in 
-         ​* '​config/​authcodes.php'​. +  * '​config/​authsources.php'​. 
-         ​*/ +  */ 
-        '​auth'​ => '​auth/​login.php',​ + '​auth'​ => '​auth/​login.php',​ 
-        /* uid attr */ + '​userid.attribute'​ => '​uid',​
-        ​'​userid.attribute'​ => '​uid',​ +
-        /* DFN-AAI attribut format: */ +
-        '​AttributeNameFormat'​ => '​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri'​+
  
 + /* Uncomment the following to use the uri NameFormat on attributes. */
 + '​attributes.NameFormat'​ => '​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri',​
 ); );
 </​code>​ </​code>​
 +
 +'''​metadata/​shib13-idp-hosted.php'''​
 +
 +<code php>
 +$metadata['​https://​idp.fh-schmalkalden.de/​simplesaml'​] = array(
 +
 + /*
 + * The hostname of the server (VHOST) that will use this SAML entity.
 + *
 + * Can be '​__DEFAULT__',​ to use this entry by default.
 + */
 + '​host'​ => '​__DEFAULT__',​
 +
 + /* X.509 key and certificate. Relative to the cert directory. */
 + '​privatekey'​ => '​idp.key',​
 + '​certificate'​ => '​idp.crt',​
 +
 + /*
 + * Authentication source to use. Must be one that is configured in
 + * '​config/​authsources.php'​.
 + */
 + '​auth'​ => '​auth/​login.php',​
 + '​userid.attribute'​ => '​uid',​
 +
 +);
 +
 +</​code>​
 +
 +
  
 '''​config/​ldap.php'''​ '''​config/​ldap.php'''​
 <code php> <code php>
 +...
 +
 $config = array ( $config = array (
  
Zeile 104: Zeile 124:
  * If the attributes parameter is set to null, all attributes will be retrieved.  * If the attributes parameter is set to null, all attributes will be retrieved.
  */  */
- //'​auth.ldap.dnpattern' ​ => '​uid=%username%,​dc=feide,​dc=no',​ + #'​auth.ldap.dnpattern' ​ => '​uid=%username%,​dc=feide,​dc=no,​ou=feide,​dc=uninett,​dc=no',​ 
- '​auth.ldap.hostname' ​  => 'ldaphost.fh-schmalkalden.de',​ + '​auth.ldap.hostname' ​  => 'ldapmaster.fh-schmalkalden.de ldapslave.fh-schmalkalden.de',​ 
- '​auth.ldap.attributes'​ => array('​mail','​sn','​ou','​uid','​employeeType','​organizationalStatus'​),​ + '​auth.ldap.attributes'​ => array('​gidNumber',​'​mail','​sn','​givenName','​ou','​uid','​employeeType','​organizationalStatus'​),​ 
- '​auth.ldap.enable_tls'​ => true,+ '​auth.ldap.enable_tls'​ => TRUE,
   
  /*  /*
Zeile 134: Zeile 154:
 ); );
  
-?>+...
 </​code>​ </​code>​
  
-=== saml2 idp ===+==== saml2 und saml1.1 IdP ====
  
 '''​config/​config.php'''​ '''​config/​config.php'''​
 +
  
 <​code>​ <​code>​
 +...
         '​enable.saml20-idp' ​            => true,         '​enable.saml20-idp' ​            => true,
-        '​enable.shib13-idp' ​            ​=> ​false,+        '​enable.shib13-idp' ​            ​=> ​true,
         '​enable.adfs-idp' ​              => false,         '​enable.adfs-idp' ​              => false,
         '​enable.wsfed-sp' ​              => false,         '​enable.wsfed-sp' ​              => false,
         '​enable.authmemcookie'​ => false,         '​enable.authmemcookie'​ => false,
 +...        ​
 </​code>​ </​code>​
  
-=== Attribute DFN AAI bereitstellen ===+==== Attribute DFN AAI bereitstellen ​====
  
 Einige Attribute fehlen in der attributeMap! Einige Attribute fehlen in der attributeMap!
Zeile 179: Zeile 202:
                                 '​scope'​ => array('​fh-schmalkalden.de'​),​                                 '​scope'​ => array('​fh-schmalkalden.de'​),​
                                 '​eduPersonAffiliation'​ => array('​member'​),​                                 '​eduPersonAffiliation'​ => array('​member'​),​
-                                #'​employeeType'​ => array('​None'​),​ 
                                 '​eduPersonEntitlement'​ => array('​common-lib-terms'​),​                                 '​eduPersonEntitlement'​ => array('​common-lib-terms'​),​
-                                #'​organizationalStatus'​ => array('​None'​),​ 
                                     ),                                     ),
                 /* create Principal */                 /* create Principal */
Zeile 237: Zeile 258:
                 ),                 ),
  
-                /* When called without parameters, it will fallback ​to filter attributes ?@?the old way?@?+                /* When called without parameters, it will fallback
                  * by checking the '​attributes'​ parameter in metadata on IdP hosted and SP remote.                  * by checking the '​attributes'​ parameter in metadata on IdP hosted and SP remote.
                  */                  */
                                        
-                # limit die attribute, siehe attributes bei den sp-metadaten ​+                # limitiert ​die attribute, siehe attributes bei den sp-metadaten ​
                 ​                 ​
                 50 => '​core:​AttributeLimit',​                 50 => '​core:​AttributeLimit',​
                 ​                 ​
 +                # hier kommt micro approve:  ​
                 90 => array(                 90 => array(
                   '​class' ​        => '​consent:​Consent',​                   '​class' ​        => '​consent:​Consent',​
Zeile 260: Zeile 282:
 </​code>​ </​code>​
  
-Als Ergebnis werden diese Attribute bereitgestellt:​ 
  
-<code lang="​xml">​ +==== DFN AAI Serviceprovider Metadata ​====
-<​saml:​AttributeStatement>​ +
-      <​saml:​Attribute Name="​uid"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​jimjoe</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​dn"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​uid=jimjoe,​ou=people,​ dc=fh-sm,​dc=de</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​scope"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​fh-schmalkalden.de</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​mail"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​j.joe(AT)fh-sm.de</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​sn"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​Joe</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​ou"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​Rechenzentrum</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​eduPersonTargetedID"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​8f244ca70cb48d3f0e2d4662c723241d61df3c32</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-     <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​eduPersonAffiliation"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​member</​saml:​AttributeValue>​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​employee</​saml:​AttributeValue>​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​staff</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​eduPersonPrincipalName"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​joe@fh-schmalkalden.de</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-      <​saml:​Attribute Name="​urn:​mace:​dir:​attribute-def:​eduPersonScopedAffiliation"​ NameFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​attrname-format:​uri">​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​member@fh-schmalkalden.de</​saml:​AttributeValue>​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​employee@fh-schmalkalden.de</​saml:​AttributeValue>​ +
-        <​saml:​AttributeValue xsi:​type="​xs:​string">​staff@fh-schmalkalden.de</​saml:​AttributeValue>​ +
-      </​saml:​Attribute>​ +
-    </​saml:​AttributeStatement>​ +
-</​code>​ +
- +
-=== DFN AAI Serviceprovider Metadata ===+
  
   touch modules/​metarefresh/​enable   touch modules/​metarefresh/​enable
Zeile 313: Zeile 295:
  
 Dieses Update wird dann später per cron-job automatisch durchgeführt. Dieses Update wird dann später per cron-job automatisch durchgeführt.
-Diese Variante NUR ZUM TEST, später wird ein eigenes Verzeichnis erstellt und dieMetadatan ​werden per cronjob regelmäßig geupdated. Siehe letzter Absatz.+Diese Variante NUR ZUM TEST, später wird ein eigenes Verzeichnis erstellt und die Metadatan ​werden per cronjob regelmäßig geupdated. Siehe letzter Absatz.
  
 ===== Test mit testsp.aai.dfn.de ===== ===== Test mit testsp.aai.dfn.de =====
  
-=== Eingabe der Metadaten des IdP beim DFN-AAI-Tool ===+==== Eingabe der Metadaten des IdP beim DFN-AAI-Tool ​====
  
   * neuen IdP anlegen (Verwaltungstool DFN-AAI)   * neuen IdP anlegen (Verwaltungstool DFN-AAI)
Zeile 327: Zeile 309:
   * unbedingt den Scope eintragen (bei uns fh-schmalkalden.de),​ sonst können die scoped-Attribute nicht richtig interpretiert werden (Anmelden am staffonly nicht möglich)   * unbedingt den Scope eintragen (bei uns fh-schmalkalden.de),​ sonst können die scoped-Attribute nicht richtig interpretiert werden (Anmelden am staffonly nicht möglich)
  
-=== Test der Authentifizierung ===+==== Test der Authentifizierung ​====
  
-zunächst könnte man das debugging einschalten,​ die SAML-Antwort an den SP wird dann angezeigt:+=== SAML2 ===
  
-'''​config/​config.php''':​ 
  
-<​code>​ +https://​testsp2.aai.dfn.de/​secure-all
-       '​debug' ​                ​=> ​     TRUE, +
-</​code>​ +
- +
-dann weiter mit https://​testsp2.aai.dfn.de/​secure-all+
  
 oder zusätzlich als Member oder zusätzlich als Member
  
 https://​testsp2.aai.dfn.de/​secure-memberonly https://​testsp2.aai.dfn.de/​secure-memberonly
 +
 +=== SAML1.1 (Shib13) ===
 +
 +https://​testsp.aai.dfn.de/​secure-all
 +https://​testsp.aai.dfn.de/​secure-memberonly
 +
  
 ===== automatisches Update der SP-Metadaten ===== ===== automatisches Update der SP-Metadaten =====
Zeile 347: Zeile 330:
 siehe http://​simplesamlphp.org/​docs/​1.10/​simplesamlphp-automated_metadata siehe http://​simplesamlphp.org/​docs/​1.10/​simplesamlphp-automated_metadata
  
-===== Todo ===== 
  
-entitlement attribut fehlt noch für DFN-AAI+<note important>​Performanceprobleme mit xmlseclibs.php</​note>​
  
-===== Änderungen am Code für redundanz ldap-server =====+03. März 2015, parsing der xml-metafiles dfn-aai dauert sehr lange, bis zu 10min, fehlermeldung von php: 
  
-  ​simplesamlphp-1.10 +  ​PHP Fatal error: ​ Maximum execution time of 600 seconds exceeded in /var/simplesamlphp/​lib/​xmlseclibs.php on line 770
-  * php-5.3 (wegen ldap-network-timeout-option notwendig)+
  
-Ich habe in der config/​ldap.php aus einem String ein Array gemacht:+Dazu dieser Hinweis:
  
-<​code>​ +https://​simplesamlphp.org/​metaprocessing 
-..+ 
-'​auth.ldap.hostname' ​  => array('​ldapmaster.fh-entenhausen.de',​ + 
-                                        '​ldapslave.fh-entenhausen.de'​)+ich habe die xmlseclibs.php ausgetauscht wie in der Anleitung vorgeschlagen
-..+aus 10min werden nach Austausch der xmlseclibs.php 5sec.
-</​code>​+
  
-und am Code was geändert: 
  
-lib/​SimpleSAML/​Auth/​LDAP.php:​ 
  
-<code lang="​diff">​ 
-58c58 
-< '​host=\''​ . $hostname . 
---- 
-> '​host=\''​ . $hostname[0] . 
-76,79c76,84 
-< $this->​ldap = @ldap_connect($hostname,​ $port); 
-< if ($this->​ldap == FALSE) 
-< throw new $this->​makeException('​Library - LDAP __construct():​ Unable to connect to \''​ . $hostname . '​\'',​ ERR_INTERNAL);​ 
- 
---- 
->         ​$this->​ldap = @ldap_connect($hostname[1]);​ 
->         ​ldap_set_option($this->​ldap,​ LDAP_OPT_NETWORK_TIMEOUT,​ 3); 
->         if (!($rr = @ldap_bind($this->​ldap))) { 
->            $this->​ldap = @ldap_connect($hostname[0]);​ 
->            ldap_set_option($this->​ldap,​ LDAP_OPT_NETWORK_TIMEOUT,​ 3); 
->            if (!($rr = @ldap_bind($this->​ldap))) { 
->              throw $this->​makeException('​Library - LDAP __construct():​ Unable to connect to the ldap-server!',​ ERR_INTERNAL);​ 
->            }  
->         } 
-98c103 
-< if (!preg_match("/​ldaps:/​i",​ $hostname) and $enable_tls) 
---- 
-> if ($enable_tls) 
  
-</​code>​ 
  
 +===== Speicherung der Micro-Approve-Nutzerdaten in einer Datenbank =====
  
-Bei Ausfall eines Ldap-Servers wird gegen den zweiten authentifiziert.+https://​simplesamlphp.org/​docs/​stable/​consent:​consent
  
  
simplesamlphp_dfn_aai.1425462123.txt.gz · Zuletzt geändert: 2015/03/04 10:42 von 2007