Möglichkeit zur LDAP Anbindung

Ich habe einen Blog Artikel verfasst - Wie benutze ich die Suche richtig - Bitte diesen beachten und auch umsetzen bevor Ihr ein Neues Thema eröffnet!

  • Hi ich schon wieder :D


    es wurde bei uns auch noch der Wunsch geäußert eine LDAP-Anbindung einzubauen.
    Da ich dies in schon vielen PHP-Projekten umgesetzt habe, wollte ich auch dieses mal fragen ob es hier ein Interesse besteht?
    Ich habe es noch nicht fertig werde mich aber heute Abend mal dran setzen.


    Wenn ich es fertig habe, würde ich es sonst auch zur Verfügung stellen.

  • Unsererseits, also von XCRIPT, besteht an so etwas immer Interesse. Nur ist das eher aus technischem Interesse und für den evtl. zukünftigen EInsatz, als aus einem konkreten Bedarf heraus.

    XCRIPT.DE - Home of BuLitipp, the original!
    Zufrieden mit dem Skript und dem Support? Möchtest du uns unterstützen? Dann könntest du etwas

    SPENDEN

  • Hätte mich auch gewundert wäre es anders gewesen. :D
    Diese Funktion ist sehr speziell und zielt auch nur auf Intranet Szenarios aus und ich glaube nicht das bei vielen der Bedarf da ist.


    Aber bei uns ist er da und ich teile gerne Code die vielleicht jemanden helfen und arbeit ersparen. :chinese:

  • Ich hätte die LDAP-Anbindung fertig da.


    Änderungen in


    content/home.passwort.php
    content/home.registrieren.php
    content/intern.profil.php
    include/inc.config.php
    include/inc.functions.php


    MfG Andreas


    Ist so aufgebaut, dass sie nur aktiviert wird, wenn die entsprechenden Zeilen in der Config auskommentiert sind.

  • Ah sehr gut, erspart mir ein Arbeit. :)



    Ich wollte es aber auf Grund des Anmeldenamens im Active Directory bei uns abfragen, damit ich einfach Single Sign On realisieren kann.
    Für unsere fälle passe ich es noch ein wenig an und erweitere ich es noch um SSO.


    :sdanke:

  • Kannst du es so bauen, dass man in der Config auswahlen kann, ob AD oder LDAP? Wir haben hier zwar parallel zum LDAP auch einen ADS laufen, aber authentifizieren die Intranetdienste durch die Bank weg gegen den LDAP... Ich habe den Code bereits so vorbereitet, dass er eigentlich auch vom xcript-Team übernommen werden kann...

  • Im vierten Beitrag ist der Anhang.

    Hallo, aber da hat sich doch schon sehr vieil in der Struktur geändert. Ich kann mir nicht vorstellen, das man einfach die "alten" Dateine einfach auf das aktuelle Script einfügen kann und fertig.
    Eine LDAP Anbindung für die aktuelle Version wäre schon was feines.

  • Für das Intranet auf meiner Arbeit musste ich eine LDAP-Anbindung für das EM 2016-Tippspiel realisieren. Dabei wird geprüft ob die angegebenen Daten korrekt sind, wenn ja wird der jeweilige Benutzer in die Datenbank geschrieben. Also es wurde nur die Login-Schnittstelle umprogrammiert und die Registrierungsseiten entfernt.
    Folgende Änderungen müssen dafür getätigt werden:


    In der include/inc.functions.php muss die komplete Funktion "checkUserState" ausgetauscht werden:

    PHP: include/inc.functions.php
    1. function checkUserState(){ global $CONFIG, $RUNTIME; if (isset($_POST['loginSubmit'])) { setcookie("xUser", $_POST['loginUser'], time() + (60*60*24), "/"); if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') { setcookie("xPass", 1, time() + (60*60*24), "/"); } else { setcookie("xPass", 0, time() + (60*60*24), "/"); } } $usr = (isset($_POST['loginUser']) ? $_POST['loginUser'] : (isset($_COOKIE['xUser']) ? $_COOKIE['xUser'] : "")); $sql = "SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '". mysql_real_escape_string($usr) ."'"; $query = mysql_query($sql); $num = mysql_num_rows($query); $showmsg = 0; if($num > 0) { $row = mysql_fetch_array($query); if($CONFIG['LDAP']['USE']) { $ldapBind = ldap_bind($CONFIG['LDAP']['CONNECT'], $CONFIG['LDAP']['DOMAIN'].'\\'.$usr, $_POST['loginPass']); if($ldapBind) { $_SESSION['s_id'] = $row['id']; $_SESSION['s_usr'] = $row['usr']; $_SESSION['s_name'] = $row['name']; $_SESSION['s_email'] = $row['email']; $_SESSION['s_level'] = $row['status']; $_SESSION['s_flash'] = $row['showflash']; $_SESSION['s_group'] = $row['department']; $sql = mysql_query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users SET lastLogin = '". (time() + getTimeOffset()) ."', currentPage='". mysql_real_escape_string($RUNTIME['FULL']) ."' WHERE id = '". $_SESSION['s_id'] ."'"); } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } } else { if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') { if($CONFIG['LDAP']['USE']) { $ldapBind = ldap_bind($CONFIG['LDAP']['CONNECT'], $CONFIG['LDAP']['DOMAIN'].'\\'.$usr, $_POST['loginPass']); if($ldapBind) { $searchFilter = '(|(samaccountname='.$usr.'))'; $ldapSearch = ldap_search($CONFIG['LDAP']['CONNECT'], $CONFIG['LDAP']['BASEDN'], $searchFilter); $results = ldap_get_entries($CONFIG['LDAP']['CONNECT'], $ldapSearch); $sql = "INSERT INTO ". $CONFIG['MYSQL']['PREFIX'] ."users (usr,email,pwd,name,department,regDate,isUnlocked,showflash) VALUES " ."('". mysql_real_escape_string($results[0]['samaccountname'][0]) ."'," ."'". mysql_real_escape_string($results[0]['mail'][0]) ."'," ."''," ."'". mysql_real_escape_string($results[0]['givenname'][0] . ' ' . $results[0]['sn'][0]) ."'," ."'ohne Gruppe'," ."'". (time() + getTimeOffset()) ."'," ."'1'," ."'1')"; $result = mysql_query($sql); $query = mysql_query("SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '".mysql_real_escape_string($usr)."'"); $row = mysql_fetch_array($query); $_SESSION['s_id'] = $row['id']; $_SESSION['s_usr'] = $row['usr']; $_SESSION['s_name'] = $row['name']; $_SESSION['s_email'] = $row['email']; $_SESSION['s_level'] = $row['status']; $_SESSION['s_flash'] = $row['showflash']; $_SESSION['s_group'] = $row['department']; $sql = mysql_query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users SET lastLogin = '". (time() + getTimeOffset()) ."', currentPage='". mysql_real_escape_string($RUNTIME['FULL']) ."' WHERE id = '". $_SESSION['s_id'] ."'"); } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } if(isset($_POST['loginSubmit'])) { if($CONFIG['TEXTART'] == 0) { if ($showmsg == 2) { $msgtext = 'Ihr Zugang ist nicht aktiviert! Sie erhalten nach der Aktivierung automatisch eine E-Mail. Sollten Sie schon lange auf die Aktivierung warten, dann melden Sie sich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum&nbsp;Kontaktformular</a>'; } elseif ($showmsg == 1) { $msgtext = 'Die Zugangsdaten sind falsch! Überprüfen Sie Benutzername und Passwort. Haben Sie ihr Passwort vergessen? Dann klicken Sie hier: <a href="index.php?page=home/passwort/">Passwort&nbsp;zurücksetzen.</a>'; } } else { if($showmsg == 2) { $msgtext = 'Dein Zugang ist nicht aktiviert! Du erhälst nach der Aktivierung automatisch eine E-Mail. Solltest du schon lange auf die Aktivierung warten, dann melde dich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum&nbsp;Kontaktformular</a>'; } elseif($showmsg == 1) { $msgtext = 'Die Zugangsdaten sind falsch! Überprüfe Benutzername und Passwort. Hast du dein Passwort vergessen? Dann klicke hier: <a href="index.php?page=home/passwort/">Passwort&nbsp;zurücksetzen.</a>'; } } if($showmsg > 0) { $_SESSION['message'] = array("alert",$msgtext); } }}


    In der include/inc.config müssen die Angaben für das LDAP getätigt werden:


    PHP: include/inc.config.php
    1. /* LDAP Konfigurationsdaten */$CONFIG['LDAP'] = array();$CONFIG['LDAP']['USE'] = true;$CONFIG['LDAP']['SERVER'] = 'SERVER';$CONFIG['LDAP']['PORT'] = PORT;$CONFIG['LDAP']['DOMAIN'] = 'DOMAIN';$CONFIG['LDAP']['USERNAME'] = 'USERNAME';$CONFIG['LDAP']['PASSWORD'] = 'PASSWORT';$CONFIG['LDAP']['BASEDN'] = 'BASEDN';/* Verbindung herstellen und Einstellungen vornehmen */$CONFIG['LDAP']['CONNECT'] = ldap_connect($CONFIG['LDAP']['SERVER'], $CONFIG['LDAP']['PORT']) or die('Keine Verbindung zu $ldapserver m&ouml;glich.');ldap_set_option($CONFIG['LDAP']['CONNECT'], LDAP_OPT_REFERRALS, 0);ldap_set_option($CONFIG['LDAP']['CONNECT'], LDAP_OPT_PROTOCOL_VERSION, 3);


    In der content/default.menu.php muss dann nur noch der Code für die Registrierungsseite entfernt werden:


    PHP: content/default.menu.php
    1. if (noMember())
    2. {
    3. ?>
    4. <a class="nav<?php echo ($RUNTIME['PATH'][1] == "registrieren" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/registrieren/")?>">Registrieren</a><span class="hide"> | </span>
    5. <a class="nav<?php echo ($RUNTIME['PATH'][1] == "passwort" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/passwort/")?>">Passwort vergessen</a><span class="hide"> | </span>
    6. <?php
    7. }

    Zufrieden mit dem Script und dem Support? Möchtest du uns unterstützen?

    Dann könntest du etwas SPENDEN. :)


    HERTHA BSC heißt unser Verein
    HERTHA BSC wird es immer sein!