[PHP] Inloggen via LDAP-server

Pagina: 1
Acties:
  • 56 views sinds 30-01-2008

  • Cerntje
  • Registratie: September 2003
  • Laatst online: 22-02 13:27
Beste Tweakers,

ik probeer een site te maken waar je via een LDAP-server kan inloggen op de site. Ik heb alsvolgt al een stuk code, waarmee je met een pop-up je username en wachtwoord in kan voeren en je kan inloggen. Dit werkt prima. Maar ik wil graag dat je je username en wachtwoord gewoon in een form invult, dus zonder pop-up. Ik heb verschillende dingen geprobeerd, zoals variabelen doorgeven, veranderen etc. maar bij mij blijft er 'Authorization failed' komen als ik met de juiste username en wachtwoord wil inloggen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?PHP

$ldapconfig['host'] = 'naampje';
$ldapconfig['port'] = poort;
$ldapconfig['basedn'] = 'o=org,c=nl';
$ldapconfig['authrealm'] = 'AWH CMS LDAP autorisation';

function ldap_authenticate() {
    global $ldapconfig;

    if (
       $_SERVER['PHP_AUTH_USER'] == "jan" && $_SERVER['PHP_AUTH_PW'] != $_SERVER['PHP_AUTH_USER'])
    {

        $ds=@ldap_connect($ldapconfig['host'],$ldapconfig['port']);
        $r = @ldap_search( $ds, $ldapconfig['basedn'], 'uid=' . $_SERVER['PHP_AUTH_USER']);

       if ($r) {
            $result = @ldap_get_entries( $ds, $r);
            if ($result[0]) {
                if (@ldap_bind( $ds, $result[0]['dn'], $_SERVER['PHP_AUTH_PW']) ) {
                    return $result[0];
                }
            }
        }
    }
    header('WWW-Authenticate: Basic realm="'.$ldapconfig['authrealm'].'"');
    header('HTTP/1.0 401 Unauthorized');
    return NULL; 
    ldap_close($ds);
}

if (($result = ldap_authenticate()) == NULL) {
    echo('Authorization Failed');
    exit(0);
}
echo('Welcome ');
$naam=$result[cn];
print("$naam[0]");
header("Location: index.php?pageId=0");

?> 


Als ik via de pop-up inlog krijg ik dus mooi te zien: Welcome Jan. Maar het lukt me niet om dit via een form te regelen. |:(

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:53
Waarom al die @jes in je code?

Verder moet je dan geen gebruik maken van de authenticate headers maar gewoon een normaal formuliertje.

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
dit heeft niks met LDAP te maken :). Je moet $_SERVER['PHP_AUTH_USER'] en $_SERVER['PHP_AUTH_PW'] vervangen door de waarden die via je formulier doorkomen...

  • Cerntje
  • Registratie: September 2003
  • Laatst online: 22-02 13:27
Ik heb inmiddels weer wat aangeklooid, maar het is nog steeds niet gelukt.
Hier een stuk waar ik mee zit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
<?

$User = "Jan"; 
$PWD = "Boom";
$ldapconfig['host'] = 'naampje';
$ldapconfig['port'] = poort;
$ldapconfig['basedn'] = 'o=org,c=nl';
//$ldapconfig['authrealm'] = 'AWH CMS LDAP autorisation';

function ldap_authenticate() {
    global $ldapconfig;

    if (
        $User = "Jan" && $PWD = "Boom")
        {

        $ds=ldap_connect($ldapconfig['host'],$ldapconfig['port']);
        $r =ldap_search( $ds, $ldapconfig['basedn'], 'uid=' . $User);

       if ($r) {
            $result = ldap_get_entries( $ds, $r);
            if ($result[0]) {
                if (ldap_bind( $ds, $result[0]['dn'], $PWD) ) {
                    return $result[0];
                }
            }
        }
    }
//  header('WWW-Authenticate: Basic realm="'.$ldapconfig['authrealm'].'"');
//  header('HTTP/1.0 401 Unauthorized');
    return NULL;
}

if (($result = ldap_authenticate()) == NULL) {
    echo('Authorization Failed'); 
    exit(0);
}
echo('Welcome ');
$naam=$result[cn];
print("$naam[0]");
?>


In dit script worden de user en password gelijk meegestuurd, maar blijft er Authorization Failed komen. Terwijl die met het pop-upscherm gewoon wel werkt.

Ik denk dat het probleem ergens hier zit

PHP:
1
//$ldapconfig['authrealm'] = 'AWH CMS LDAP autorisation';


Verder in het script worden via deze weg de username en wachtwoord meegestuurd.

Iemand ideeen ?

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 14-01 22:23

_Sunnyboy_

Mooooooooooooooooo!

Ik kan in je functie wel een situatie bedenken waarbij hij helemaal niks returned, ook niet expliciet NULL (al die geneste if). Ik zou je probleem daar dus zoeken. Probeer des noods met wat echo 'checkpoint 1 '; etc. uit te vinden waar je script precies langskomt.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 23-04 13:07
$User en $PWD zijn geen global vars
edit:

En er is meer mis

[ Voor 34% gewijzigd door stekkel op 14-09-2004 12:29 ]


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 21-05 08:48

chem

Reist de wereld rond

Anyways, je hebt een stukje code ergens vandaan gehaald als ik het zo begrijp, en nu werkt het niet.
Klinkt als een cursusje PHP - en dat is niet de bedoeling hier.

Klaar voor een nieuwe uitdaging.

Pagina: 1

Dit topic is gesloten.