- 1 - Option LDAP easylearn skills4u Version 4.2 SDN AG, Solution Development Network Januar 2006
- 2 - Inhaltsverzeichnis 1. LDAP...3 1.1. Login...3 1.1.1. Option... 3 1.2. Datenübernahme vom LDAP Server...4 1.3. Datenabgleich...4 1.3.1.1. Grobablauf :... 4 1.4. Felderzuordnung easylearn skills4u / ActiveDirectory...5 2. Installation / Konfiguration...6 2.1. Einstellungen in config.php...6 2.2. Einstellungen in config.ldap.php...7 2.2.1. Optionale Funktionen... 9 2.2.1.1. Zusätzliche Filter für den Benutzerimport... 9 2.2.1.2. Spezielle Datenfelder... 9 2.2.1.3. UDF_DirectoryHandleField... 9 2.2.1.4. UDF_DirectoryHandleUpdateField... 9 2.2.1.5. Gesperrte Benutzerkontos... 10 2.3. Beispiel config.ldap.php...11 3. Hintergrundprozess erstellen...15 3.1. Portalrun im Taskscheduler (Geplante Tasks) konfigurieren...15 3.1.1. Zeitplan einstellen... 16
- 3-1. LDAP easylearn skills4u kann über LDAP (Lightweight Directory Access Protocol) auf die Daten eines LDAP-Servers wie zum Beispiel das Windows Active Directory zugreifen. Für die Anmeldung am ActiveDirectory wird ein Konto (Login/Passwort) mit administrativen Rechten (Kontenoperator) benötigt. Voraussetzung für die Kopplung ist, dass das Feld E-Mail im ActiveDirectory je Benutzer eine gültige E-Mailadresse definiert ist. Benutzer ohne E-Mailadresse können nicht importiert werden. Die easylearn skills4u Option LDAP umfasst 3 Hauptfunktionen: Beim Login werden Benutzer-ID/Passwort via LDAP-Server verifiziert. Dadurch kann sich der Benutzer mit seiner gewohnten Benutzer-ID/Passwort (wie bei der Netzwerkanmeldung) an easylearn skills4u anmelden. Mit der Datenübernahmefunktion können Benutzer manuell in den Benutzerstamm von easylearn skills4u übernommen werden. Dies ist notwendig, wenn für die Benutzer Kurse geplant werden müssen. Mit der Datenabgleichsfunktion wird der Benutzerstamm von easylearn skills4u mit dem des LDAP-Servers abgeglichen. Falls das Benutzerkonto im LDAP-Server deaktiviert wurden, wird es auch in easylearn skills4u deaktiviert. Die Datenabgleichsfunktion wird normalerweise täglich (nachts) durchgeführt. Dadurch sind die erfassten Daten in easylearn skills4u identisch zu den Daten im LDAP-Server (Telefonnummer, E-Mail, etc.). 1.1. Login Die Standardanmeldung wird ersetzt durch eine erweiterte Anmeldefunktion. Dabei wird mit der eingegebenen Benutzeridentifikation und dem Passwort eine Anmeldung am LDAP-Server versucht. Wenn die Anmeldung erfolgreich ist, wird der Benutzer automatisch bei easylearn skills4u angemeldet. Die Funktionen Passwort ändern und Passwort vergessen sind nicht verfügbar, da diese im LDAP-Server verwaltet werden. Hinweis: Die Benutzerkonten von easylearn skills4u werden beim Importieren markiert, dass es sich um LDAP-Konten handelt. Nur diese markierten Konten können sich via LDAP anmelden. In easylearn skills4u können weiterhin Benutzerkonten erstellt und verwaltet werden (z.b. ecoach@firma.com, admin@easylearn.ch etc) ohne dass sie im LDAP-Server existieren müssen.. Diese melden sich dann direkt an easylearn skills4u an und nicht am LDAP-Server. 1.1.1. Option Damit sich ein Benutzer bei easylearn skills4u anmelden kann, muss er ein Konto im Benutzerstamm von easylearn skills4u haben. Bei erfolgreicher Anmeldung am LDAP-Server kann das Benutzerkonto automatisch erstellt werden. Fehlt das Benutzerkonto in easylearn skills4u und ist diese Option nicht eingeschaltet, kann sich der Benutzer nicht anmelden.
- 4 - Wichtig: Falls im ActiveDirectory Loginbeschränkungen existieren, welche die Anmeldung für ein bestimmtes Konto nur an vordefinierten Computern erlaubt, so muss der Webserver, auf welchem easylearn skills4u betrieben wird, ebenfalls in die Liste der erlaubten Computer aufgenommen werden. (Eigenschaften des Benutzers Konto -> Anmelden -> Computer XXXX) 1.2. Datenübernahme vom LDAP Server Mit der Datenübernahme können Benutzerkonten vom LDAP-Server nach easylearn skills4u übernommen werden. Die Benutzer können über einen Filter ausgewählt und anschliessend importiert werden. Beim Importieren werden bestehende Konten nicht geändert, nur neue hinzugefügt. 1.3. Datenabgleich Beim Datenabgleich werden alle Benutzer, welche als LDAP-Konten markiert sind, mit den Benutzerdaten vom LDAP-Server synchronisiert. 1.3.1.1. Grobablauf : Loop über alle erfassten Benutzerkonten mit gesetzter LDAP-Flagge Überprüfen ob der Benutzer im LDAP-Server vorhanden ist Vorhanden im LDAP-Server: Konto im LDAP-Server deaktiviert: Benutzer deaktivieren easylearn skills4u Konto nicht deaktiviert Felder Name, Vorname, E-Mail, Telefon, Mobile prüfen und evtl. aktualisieren. Falls Benutzer deaktiviert war, diesen wieder aktivieren Nicht vorhanden im LDAP-Server: Benutzer deaktivieren
- 5-1.4. Felderzuordnung easylearn skills4u / ActiveDirectory Portal Name Vorname E-Mail Benutzer-ID Telefon Fax Mobile External-ID Kostenstelle Abteilung Standort ActiveDirectory sn givenname mail samaccountname telephonenumber facsimiletelephonenumber mobile department
- 6-2. Installation / Konfiguration Die Lizenz muss die Option LDAP beinhalten. Bei der LDAP-Installation werden die notwendigen alle Dateien von install/ldap in den Installationsordner von easylearn skills4u kopiert. Die folgenden Programme müssen sich im Installationsordner von easylearn skills4u befinden. config.ldap.php Konfiguration LDAP-Server fusrintfdirectory.php/usrintfdirectory.php Dient zur Anzeige von Benutzern in der Benutzerverwaltung jobldapsync.php Dieses Programm dient zum Datenabgleich. Es kann im Hintergrund von Portalrun.exe gestartet werden. 2.1. Einstellungen in config.php $GLOBALS["USRADM_USRFLAGS_LABEL"] = "ActiveDirectory-Konto"; Beschriftung in der Benutzerverwaltung für ein LDAP-Konto. Markierte Benutzer Konten werden mit LDAP abgeglichen. $GLOBALS["ENHANCED_AUTH_SCRIPT"] = "include/func.enhancedlogin.php"; Dieses Script wird benötigt, wenn die Anmeldung vom LDAP-Server verifiziert werden soll. $GLOBALS["DirectoryIntf"]="fusrintfdirectory.php?formname=formname,640,480,Active Directory "; Diese Einstellung zeigt in der Benutzerverwaltung eine Schaltfläche an, welche es dem E- Administrator erlaubt, die Benutzer via LDAP-Server zu suchen.
- 7-2.2. Einstellungen in config.ldap.php Die LDAP-Einstellungen werden im Array $GLOBALS["LDAPCONFIG"] gespeichert. Die folgenden Einstellungen beziehen sich immer auf dieses Array Einstellung SERVER BASEDN SERVERTYPE BIND_USER BIND_PASSWORD PROTOCOL_VERSION ANONYMOUSBIND SEARCH_USERBASE SEARCH_USERBASE_M ATCH Beschreibung Name oder IP-Adresse des LDAP-Servers Definiert den Basis-Ast im LDAP-Baum, von dem aus die Suche nach Benutzern erfolgen soll: Beispiel: DC=company, DC=ch AD = ActiveDirectory leer = alle anderen Wenn kein anonymes Bind möglich ist muss hier der Benutzer zwingend definiert werden. Beim Zugriff auf einen Server mit ActiveDirectory ist diese Einstellung zwingend notwendig. Die Einstellung definiert den Benutzer, welcher beim Import, Datenabgleich, prüfen der Daten mit dem LDAP-Server kommuniziert. Das LDAP-Konto muss die Datensätze anderer Benutzer lesen dürfen, damit beispielsweise festgestellt werden kann, ob das Konto deaktiviert oder gesperrt ist. Im ActiveDirectory muss dieser Benutzer das Recht für einen Kontenoperator besitzen. skills4u@company.ch Passwort für das Konto von BIND_USER LDAP-Protokollversion, Voreinstellung ist die Version 3. Beim Zugriff auf ein ActiveDirectory muss die auf Version 3 eingestellt sein Vorgabe: true Definiert, ob für die Verbindung zum LDAP-Server der Benutzer BIND_USER verwendet werden muss. true: Anonyme Verbindung zum LDAP Server false: Benannte Verbindung mit BIND_USER/BIND_PASSWORT Wird beim Servertyp AD automatisch auf false gesetzt da dieser keine anonyme.verbindungen erlaubt Suchfilter für die explizite Suche im LDAP Baum. Wird nur programmintern verwendet. Vorgabe beim Servertyp AD ist: (objectclass=user) sonst (objectclass=person) Suchfilter für das Browsen im LDAP Baum. Suchfilter wird z.b. beim LDAP-Browser oder Benutzerimport verwendet. Vorgabe bei Servertyp AD ist: (objectclass=user)(userprincipalname=*) sonst (objectclass=person)(uid=*)
- 8 - USERID_FIELD AUTOCREATE_USER AUTOCREATE_ORGID AUTOCREATE_ORGID_ FUNC FIELDMAP SYNCMAP BAN_MISSING_USER NOTIFYUSER_ONUPD ATE_EMAIL SEARCHRESULTFIELD IMPORTLISTVIEW BROWSELISTVIEW Definiert ein Datenfeld, welches einen Benutzer eindeutig identifiziert. Vorgabe bei Servertyp AD ist: samaccountname sonst uid Einstellung: true oder false; Voreinstellung: false Definiert, ob ein beim erfolgreichen Login via LDAP ein Benutzerkonto in easylearn skills4u erstellt wird. Nummer der Community in easylearn skills4u, welche einem neu erstellen Konto automatisch zugeordnet wird. Voreinstellung: 1 Achtung: Wenn die Benutzer in verschiedene Communities eingefügt werden müssen, muss eine Funktion in der Einstellung AUTOCREATE_ORGID_FUNC definiert werden. Definiert eine Funktion, welche anhand der LDAP-Daten die richtige Community erkennen kann. Dieses Array definiert die Zuordnung der LDAP-Felder zu den easylearn skills4 Datenbankfeldern. Die Einstellung "--default--"bedeutet, dass der Wert von der Voreinstellung der Community gelesen wird (Fenster 6.1.1) Dieses Array definiert, ob ein Datenfeld beim Datenabgleich berücksichtigt wird 0 = nicht ändern 1 = mit dem Wert vom LDAP-Konto überschreiben 1 = Benutzer, welche bei der Synchronisierung nicht im LDAP- Verzeichnis vorhanden sind, werden gesperrt. Enthält ein Array von allen benötigten LDAP-Feldnamen, welche für den Import und die Synchronisation verwendet werden. Wenn diese Einstellung fehlt, werden alle Felder vom LDAP-Server gelesen Enthält ein Array von LDAP-Feldern und Überschrift, welche in der Importvorauswahl 80.1.2 die gefundenen Benutzer in der LDAP- Datenbank anzeigt. Enthält ein Array von LDAP-Feldern und Überschriften, welche in der Browserübersicht 80.3.1 die gefundenen Benutzer in der LDAP- Datenbank anzeigt. Standardmässig enthält das Array die folgenden Werte: array( $ldap->getuseridfield() => LNG_NICKNAME,
- 9 - "mail" "givenname" "sn" ); => LNG_EMAIL, => LNG_FIRSTNAME, => LNG_LASTNAME 2.2.1. Optionale Funktionen 2.2.1.1. Zusätzliche Filter für den Benutzerimport Mit den optionalen Funktionen UDF_DirectoryImportFilter($cfg,$form) können zusätzliche Eingabefelder in die Filtermaske 80.1.1 aufgenommen werden. Die zusätzlichen Felder müssen über die Funktion UDF_DirectoryImportSelectUsers($cfg,$ldap,&$filter) in den Filter für den LDAP-Aufruf angefügt werden (Siehe Beispiel). 2.2.1.2. Spezielle Datenfelder Diese Funktion geben als Ergebnis den Inhalt des Datenfeldes zurück (Sprachcode,Landescode etc). UDF_DirectoryHandleGroupID($cfg,$ldap,$option,$sysdefault,$orgid,$mode); UDF_DirectoryHandleDepartID($cfg,$ldap,$option,$sysdefault,$orgid,$mode); UDF_DirectoryHandleCCID($cfg,$ldap,$option,$sysdefault,$orgid,$mode); UDF_DirectoryHandleLangID($cfg,$ldap,$option,$sysdefault,$orgid,$mode); UDF_DirectoryHandleSiteID($cfg,$ldap,$option,$orgid,$sysdefault,$mode); UDF_DirectoryHandleCountryID($cfg,$ldap,$option,$orgid,$sysdefault,$mode); Parameter $cfg $ldap $option $sysdefault $orgid $mode Beschreibung Klasse cconfig Klasse mit den LDAP Daten Inhalt des LDAP Feldes, d.h. der Wert der verändert werden soll. Standardwert dieses Feldes für die aktuelle Community. aktuelle Community Modus Insert (Neue Benutzer) oder Update (Synchronisation) Werte. 1 = Insert 2 = Update 2.2.1.3. UDF_DirectoryHandleField Mit der Funktion UDF_DirectoryHandleField können alle anderen Felder ausser den oben genannten Felder von der Standardverarbeitung ersetzt werden. Die Funktion muss als Ergebnis true zurückgeben, wenn die Standardverarbeitung ersetzt werden soll. Die Daten des Feldes muss im Feld $data gespeichert werden. UDF_DirectoryHandleField($cfg,$ldap,$field,&$data,$orgid,$mode); 2.2.1.4. UDF_DirectoryHandleUpdateField
- 10 - Die Funktion UDF_DirectoryHandleUpdateField wird bei der Synchronisation für jades Datenfeld aufgerufen. Die Funktion muss als Ergebnis true zurückgeben, wenn die Standardverarbeitung ersetzt werden soll. Die Daten des Feldes und der Datenbanfeldname müssen im Feld $data als Zuweisung für den SQL-String gespeichert werden (Beispiel: countryid= CH );. UDF_DirectoryHandleUpdateField($cfg,$ldap,$field,$value,$orgid,$queryid,&$data) 2.2.1.5. Gesperrte Benutzerkontos Mit der Funktion UDF_LDAPAccountLocked($ldap) wird der Lockstatus eines Benutzerkontos als true oder false zurückgegeben. Beim Servertyp AD wird der Status aus dem Datenfeld useraccountcontrol gelesen. Für alle anderen Servertypen muss diese Funktion definiert werden, wenn gesperrte Benutzer im LDAP-Verzeichnis auch für easylearn skills4u gesperrt werden sollen.
- 11-2.3. Beispiel config.ldap.php <? if (!defined("config_ldap_php")) define("config_ldap_php",1); $GLOBALS["LDAPCONFIG"] = Array(); $GLOBALS["LDAPCONFIG"]["SERVER"] ="192.168.10.30"; $GLOBALS["LDAPCONFIG"]["BASEDN"] = "DC=mycompany, DC=ch"; //$GLOBALS["LDAPCONFIG"]["DOMAIN"] = "MYCOMPANY"; $GLOBALS["LDAPCONFIG"]["BIND_USER"] = "ldapaccess@mycompany.ch"; $GLOBALS["LDAPCONFIG"]["BIND_PASSWORD"] = "secret"; //$GLOBALS["LDAPCONFIG"]["ANONYMOUSBIND"] = false; $GLOBALS["LDAPCONFIG"]["PROTOCOL_VERSION"] = 3; $GLOBALS["LDAPCONFIG"]["SERVERTYPE"] = "AD"; ---------- bei ActiveDirectory ----------------------- $GLOBALS["LDAPCONFIG"]["SEARCH_USERBASE"] = "(objectclass=user)"; $GLOBALS["LDAPCONFIG"]["SEARCH_USERBASE_MATCH"] = "(userprincipalname=*)(mail=*)(samaccountname=*)"; $GLOBALS["LDAPCONFIG"]["USERID_FIELD"] = "samaccountname"; ------------------------------------------------------- anderer LDAP-Server $GLOBALS["LDAPCONFIG"]["SEARCH_USERBASE"] = "(objectclass=person)"; $GLOBALS["LDAPCONFIG"]["SEARCH_USERBASE_MATCH"] = "(mail=*)"; $GLOBALS["LDAPCONFIG"]["USERID_FIELD"] = "uid"; $GLOBALS["LDAPCONFIG"]["AUTOCREATE_USER"] = true; $GLOBALS["LDAPCONFIG"]["AUTOCREATE_ORGID"] = 1; //$GLOBALS["LDAPCONFIG"]["AUTOCREATE_ORGID_FUNC"] = "My_LDAPIMPORT_Orgid"; //$GLOBALS["LDAPCONFIG"]["BAN_MISSING_USER"] = 1; $GLOBALS["LDAPCONFIG"]["NOTIFYUSER_ONUPDATE_EMAIL"] = 1; $GLOBALS["LDAPCONFIG"]["FIELDMAP"] = array( "email" => "mail", "userid" => "samaccountname", "firstname" =>"givenname", "lastname" => "sn", "phone" => "telephonenumber", "fax" => "facsimiletelephonenumber", "mobile" => "mobile", "siteid" => "--default--", "sitedescr" => "", "departid" => "--default--", "departdescr" => "", "groupid" => "--default--", "groupdescr" => "", "ccid" => "--default--", "ccdescr" => "", "langid" => "--default--", "countryid" => "--default--", "externalid" =>""); $GLOBALS["LDAPCONFIG"]["SYNCMAP"] = array(
- 12 - "banned" => 1, "email" => 1, "userid" => 0, "firstname" => 1, "lastname" => 1, "phone" => 1, "fax" => 1, "mobile" => 1, "siteid" => 0, "departid" => 1, "groupid" => 0, "ccid" => 0, "langid" => 0, "countryid" => 0, "externalid" =>0); $GLOBALS["LDAPCONFIG"]["SEARCHRESULTFIELD"] = array( "mail","samaccountname","userprincipalname", "givenname","sn", "telephonenumber","facsimiletelephonenumber", "mobile", "department","st","physicaldeliveryofficename","company", "useraccountcontrol"); $GLOBALS["LDAPCONFIG"]["IMPORTLISTVIEW"] = array( "mail" => "E-Mail", "givenname" => "Vorname", "sn" => "Nachname", // "telephonenumber" => "Telefon", // "facsimiletelephonenumber" =>"Fax", // "mobile" => "Mobile", // "department" => "Abteilung", "company" => "Firma", "st" => "Bundesland/Kanton", "physicaldeliveryofficename" => "Büro" ); function My_LDAPIMPORT_Orgid($ldap) $comp = $ldap->getattribute("company"); switch ($comp) case "Company A": return 2; break; default: return 1; break; Mit dieser Funktion lassen sich Selektions-Felder hinzufügen. (80.1.1) function UDF_DirectoryImportFilter($cfg,&$form) $form->setfield("company",lng_company,"text","","size=40"); $form->setfield("department",lng_department,"text","","size=40"); $form->setfield("officename",lng_dir_officename,"text","","size=40"); $form->setfield("st",lng_dir_state_county,"text","");
- 13 - Diese Funktion fügt die in UDF_DirectoryImportFilter definierten Felder in den Suchfilter der LDAP-Abfrage ein. function UDF_DirectoryImportSelectUsers($cfg,$ldap,&$filter) if ($cfg->request("company")) $filter[$ldap->mapdbtoldap("company")] = $cfg->request("company"); if ($cfg->request("department")) $filter["department"] = $cfg->request("department"); if ($cfg->request("officename")) $filter["physicaldeliveryofficename"] = $cfg->request("officename"); if ($cfg->request("st")) $filter["st"] = $cfg->request("st"); function UDF_LDAPAccountLocked($ldap) return true/false function UDF_DirectoryHandleField($cfg,$ldap,$field,&$data,$orgid,$mode) $processed = false; return $processed; function UDF_DirectoryHandleSiteID(($cfg,$ldap,$option,$orgid,$sysdefault,$mode) return $sysdefault; function UDF_DirectoryHandleLangID($cfg,$ldap,$option,$sysdefault,$orgid,$mode) return $sysdefault; function UDF_DirectoryHandleCCID($cfg,$ldap,$option,$sysdefault,$orgid,$mode) return $sysdefault; function UDF_DirectoryHandleCountryID($cfg,$ldap,$option,$orgid,$sysdefault,$mode) return $sysdefault; function UDF_DirectoryHandleDepartID($cfg,$ldap,$option,$sysdefault,$orgid,$mode)
- 14 - $departdescr = $ldap->getattribute("department"); if (!$departdescr) return ""; $db = & $cfg->db; $tdepartment = $cfg->tblid."department"; $rc = $db->querynext("select departid from $tdepartment where orgid=$orgid and descr = '$departdescr'"); if ($rc) return $db->f($rc,"departid"); $i = 0; do $i++; $departid = sprintf("%06d",$i); while ($db->querynext("select departid from $tdepartment where orgid=$orgid and departid='$departid'")); $sql = "insert into $tdepartment (departid,orgid,descr) values('$departid',$orgid,'$departdescr')"; $db->query($sql); $cfg->logsql($sql,"insert DEPARTMENT","IMPORT_USER"); return $departid; function UDF_DirectoryHandleGroupID($cfg,$ldap,$option,$sysdefault,$orgid,$mode) return $sysdefault; // defined(config_ldap_php)?>
- 15-3. Hintergrundprozess erstellen Die Option LDAP benötigt einen Hintergrundprozess, welcher die Benutzer Daten im easylearn skills4u auf dem neuesten Stand hält. Für die Verarbeitung wird das Programm portalrun.exe verwendet, welches das Skript jobldapsync.php ausführt. 3.1. Portalrun im Taskscheduler (Geplante Tasks) konfigurieren Öffnen Sie das Fenster Geplante Tasks : 1. Start -> Einstellung -> Systemsteuerung -> Geplante Tasks 2. Wählen Sie Geplanten Task hinzufügen 3. Klicken Sie im Assistent auf die Schaltfläche Weiter 4. Klicken Sie auf die Schaltfläche Durchsuchen und wählen Sie das Programm Portalrun.exe aus, normalerweise befindet sich das Programm in Installationsverzeichnis von easylearn skills4u. 5. Klicken Sie auf Täglich und die Schaltfläche Weiter 6. Ändern Sie die Zeit auf 06:00 und klicken Sie auf die Schaltfläche Weiter 7. Geben Sie den Benutzernamen und das Passwort ein, unter dem dieses Programm ausgeführt werden soll 8. Klicken Sie auf Fertigstellen Nun wird Ihnen der erstellte Task angezeigt. Fügen Sie jetzt im Feld "Starten" die korrekte URL an. Die URL muss auf das Portalscript jobldapsync.php zeigen. Beispiele: http://www.intra/jobldapsync.php http://www.portal.intra/portal/jobldapsync.php
- 16-3.1.1. Zeitplan einstellen Stellen Sie die Startzeit ein, ab wann portalrun.exe täglich ausgeführt wird.