kostenloser Webspace werbefrei: lima-city


PHP5-ldap

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t******r

    Hallo Forumianer!

    Ich habe folgendes Problem:

    Ich möchte gerne mit untenstehendem Script einen Login generieren, der die Benutzerdaten allerdings nicht in einer MySQL-DB vergleicht sondern mit einem Active Directory 2008 R2. Funktionieren tut's, aber:

    Es können sich sämtliche Benutzer der Domäne authentifizieren. Ich möchte dies aber auf eine bestimmte Gruppe im AD reduzieren. Leider sind alle bisherigen Versuche gescheitert, ich hoffe auf Hilfe aus der Community! :)

    Hier mein php-file:

    <?php
    
    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("SERVERNAME");
    	$username = $username."@gal.local";
    	if (@ldap_bind($ldap,$username,$password)) {
    		echo("permission granted");
    		ldap_unbind($ldap);
    	} else {
    		echo("permission denied");
    	}
    }
    	
    if (isset($_POST['btnLogin']) AND $_POST['strUser'] != NULL AND $_POST['strPassword'] != NULL) //Anonymen Zugriff verhindern
    {
    	$user = $_POST['strUser'];
    	$pw = $_POST['strPassword'];
    		
    		$result = ldap_auth($user,$pw);
    		echo $result;
    }
    ?>
    <html>
    	<head>
    		<title>Test</title>
    	</head>
    	<body>
    		<form action="login.php" method="post">
    			<table align="center">
    				<tr>
    					<td>User:</td>
    					<td><input type="text" name="strUser" /></td>
    				</tr>
    				<tr>
    					<td>Passwort:</td>
    					<td><input type="password" name="strPassword" /></td>
    				</tr>
    				<tr>
    					<td>&nbsp;</td>
    					<td><input type="submit" name="btnLogin" /></td>
    				</tr>
    			</table>
    		</form>
    	</body>
    </html>


    Gruss und Danke im Voraus :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich würde mal Vermusten das du ldap_search verwenden solltest. Damit könntest du dann erst prüfen ob der User in deiner Gruppe ist, wenn nicht, dann gehts nicht.
    http://www.php.net/manual/de/function.ldap-search.php
  4. Autor dieses Themas

    t******r

    Okay ich habe einige Informationen vergessen zu erwähnen:

    Webserver:
    Ubuntu Server 10.10

    Installierte Software:
    apache2
    php5
    mysql-server
    php5-mysql
    php5-ldap
    openssl (für https)

    Wenn ich mit benutzer@domäne authentifizieren möchte funktioniert das wunderbar.

    Wenn ich allerdings mit folgender Variable (was laut php.net funktionieren müsste) authentifizieren möchte:

    $user = "cn=".$username.",ou=Users,dc=gal,dc=local";


    Funktioniert nix. Also die ganze Funktion sähe dann so aus:

    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("SERVERNAME");
    	//$username = $username."@gal.local";
            $user = "cn=".$username.",ou=Users,dc=gal,dc=local"
    	if (@ldap_bind($ldap,$user,$password)) {
    		echo("permission granted");
    		ldap_unbind($ldap);
    	} else {
    		echo("permission denied");
    	}


    Was mache ich da falsch?

    Gruss
    Pete
  5. Was bekommst du denn für eine Fehler Meldung?
    Hast du
    error_reporting(E_ALL);
    in deinem Code drin?
  6. Autor dieses Themas

    t******r

    Dieser Code gibt überhaupt keine Meldung aus:

    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("172.30.21.69");
    	//$username = $username."@gal.local";
    	$user = "cn=".$username.",ou=Users,dc=gal,dc=local";
    	if (@ldap_bind($ldap,$user,$password)) {
    		echo("permission granted");
    		error_reporting(E_ALL);
    		ldap_unbind($ldap);
    	} else {
    		echo("permission denied");
    		error_reporting(E_ALL);
    	}
    }


    Irgendwie komisch, oder? o.o
  7. thegeter schrieb:
    Dieser Code gibt überhaupt keine Meldung aus:

    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("172.30.21.69");
    	//$username = $username."@gal.local";
    	$user = "cn=".$username.",ou=Users,dc=gal,dc=local";
    	if (@ldap_bind($ldap,$user,$password)) {
    		echo("permission granted");
    		error_reporting(E_ALL);
    		ldap_unbind($ldap);
    	} else {
    		echo("permission denied");
    		error_reporting(E_ALL);
    	}
    }


    Irgendwie komisch, oder? o.o

    -.- nicht wirklich...
    es müsste so aussehen um Fehler zu sehen:
    error_reporting(E_ALL);
    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("172.30.21.69");
    	//$username = $username."@gal.local";
    	$user = "cn=".$username.",ou=Users,dc=gal,dc=local";
    	if (ldap_bind($ldap,$user,$password)) {
    		echo("permission granted");
    		error_reporting(E_ALL);
    		ldap_unbind($ldap);
    	} else {
    		echo("permission denied");		
    	}
    }
    // und dann den Funktionsaufruf
    function ldap_auth('user','passwd');
  8. Autor dieses Themas

    t******r

    Mh... ohne echo kommt nix raus. Macht Sinn.

    Fehler #1; 22527
    Fehler #2; 30719

    Code sieht jetzt so aus:

    echo "1te".error_reporting(E_ALL);
    function ldap_auth($username,$password)
    {
    	$ldap=ldap_connect("172.30.21.69");
    	//$username = $username."@gal.local";
    	$user = "cn=".$username.",ou=Users,dc=gal,dc=local";
    	if (@ldap_bind($ldap,$user,$password)) {
    		echo("permission granted");
    		ldap_unbind($ldap);
    	} else {
    		echo "2te".error_reporting(E_ALL);
    		echo("permission denied");
    	}
    }


    Gruss
    Pete

  9. nein das echo macht keinen sinn...
    Hier musst du aber was ändern (wie schon gepostet): @ldap_bind
    Das @ muss weg, denn das unterdrückt die fehlermeldungen
  10. Autor dieses Themas

    t******r

    Mh, das @ wars das ich nicht gesehen habe.

    Leider gibts jetzt so keine Ausgabe mehr, ausser dem normalen "permission denied"
  11. In der php Doku steht nicht, dass der String "cn=".$username.",ou=Users,dc=gal,dc=local" funktioniert.
    Es steht als Kommentar. ;-)
    Der Kommentar ist von Juni letzten Jahres und bezieht sich explizit auf OpenLDAP unter Linux.
    Ich würde vermuten, dass der übergebene String komplett als Benutzernamen interpretiert wird. Ist aber nur ins Blaue hinein geraten.

    Ansonsten lass dir die Fehlermeldungen ausgeben.
    ldap_ errno
    ldap_ error
    ldap_ err2str

    Gruß und viel Erfolg
    Lucas
  12. Autor dieses Themas

    t******r

    Hm, vielen Dank für den Hinweis, aber welche PHP-Doku meinst du genau? :confused:

    Meinst du, dass nicht der mit POST übermittelte Wert als Benutzername eingetragen wird sondern effektiv mit den folgenden Daten authentifiziert wird:

    $username@gal.local ?

    Danke ^^
  13. thegeter schrieb:
    Hm, vielen Dank für den Hinweis, aber welche PHP-Doku meinst du genau? :confused:

    Meinst du, dass nicht der mit POST übermittelte Wert als Benutzername eingetragen wird sondern effektiv mit den folgenden Daten authentifiziert wird:

    $username@gal.local ?

    Danke ^^

    Moin,

    ich meinte http://de.php.net/ldap_bind.
    Allerdings steht da auch nicht, dass man den entsprechenden String nicht übergeben kann.
    Sorry, habe mich da leider verlesen.

    Habe als weitere Anregung was von PEAR gefunden:
    http://pear.php.net/package/Auth/download

    Vielleicht kommst du damit ja weiter. Wenn es klappen sollte würde ich mich über eine kleine Info freu, wie du es gemacht hast. :-)

    Gruß Lucas

    edit:
    Die Tutorialseite dazu. :)
    http://www.linux-magazin.de/Heft-Abo/Ausgaben/2008/07/Zentral-erfasst

    Beitrag zuletzt geändert: 23.1.2011 19:17:16 von lucas9991
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!