Gebruikers valideren in AD met PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben op zoek naar een manier om een gebruikersnaam en wachtwoord te valideren a.d.h.v. een Active Directory-database. Ik heb ooit een Ubuntu-server aan een AD gekoppeld via LDAP, maar nu vraag ik me af of en hoe het mogelijk is om dit ook met PHP te doen. De bedoeling is dus om via een formulier de gebruikersnaam en wachtwoord aan AD aan te bieden en dat AD dan controleert of de combinatie klopt.

Ik ben dit script al tegen gekomen. Heeft iemand hier ervaring mee? Of is het makkelijk om zelf een klasse te schrijven? Of is een andere klasse misschien beter?

Alle tips zijn welkom. Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Het Zend Framework heeft een authenticatiecomponent waarin je adapters kan koppelen om de authenticatie te verzorgen. Een van deze adapters is LDAP, welke zowel ondersteuning biedt voor MS AD en OpenLDAP.

Ik zou eigenlijk meer vertrouwen op proven technology van een groot bedrijf dan een script waar je geen idee hebt hoe in het vervolg de ontwikkelingen lopen.

Meer informatie over Zend_Auth_Adapter_Ldap in de reference guide: http://framework.zend.com...nd.auth.adapter.ldap.html

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 17:07

MueR

Admin Tweakers Discord

is niet lief

PHP heeft daar gewoon native ondersteuning voor? Waarom iedereen toch elke keer aankomt met dat logge ZF is me een raadsel.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik inderdaad liever functies van PHP zelf dan van een framework, dus dat is mooi om te zien. Maar kun je met LDAP in PHP ook data aanleveren aan AD en het hem dan laten valideren? Of moet ik met PHP al een soort van hash maken en dia aan AD aanbieden? Zo ja: wat voor een hash is het dan? Ik heb geen idee hoe AD de wachtwoorden van gebruikers opslaat.

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 15:22
Via Google zijn er toch meer dan genoeg voorbeelden te vinden die het principe uitleggen...

Acties:
  • 0 Henk 'm!

  • RomeoJ
  • Registratie: Mei 2003
  • Niet online

RomeoJ

Matched: (.*)

Dat gaat vrij gemakkelijk, op zo'n manier zou het al gewoon werken hoor!

PHP:
1
2
3
4
5
6
7
8
9
$username = "testuser";
$password = "pass";

$ldap = ldap_connect("ldap.test.nl");
if($bind = ldap_bind($ldap, $username, $password)) {
  // Succesvolle authenticatie..
} else {
  // Authenticatie mislukt..
}

[ Voor 10% gewijzigd door RomeoJ op 21-11-2010 14:22 ]

You only need two tools in life: WD-40 and Duct-Tape, if it doesn't move and it should, use the WD-40. If it does move and it shouldn't, use the Tape.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@iH8: Iedere schil die om de functies van PHP wordt gebouwd levert vertraging op, dat kun je niet ontkennen. Of dit nu significant is of niet, als het niet nodig is dan gebruik ik het liever niet.

@RomeoJ: Dat ziet er simpel uit. Dat ga ik eens testen. Hartstikke bedankt.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
MueR schreef op zondag 21 november 2010 @ 13:57:
Waarom iedereen toch elke keer aankomt met dat logge ZF is me een raadsel.
Wanneer je zelf een authenticatie mechanisme wil bouwen (dus ook goed in je persistence, schaalbaar, generiek én testable) zit je gauw met eenzelfde implementatie. Dan is je eigen prutseltje geenszins sneller. Wie zegt dat je de gehele MVC stack wil gebruiken voor een stukje authenticatie :?

/edit: Verder was de vraag trouwens om algemene suggesties. Of je nu scriptje van locatie X, native implementatie van Y of frameworkcomponent van Z gebruikt, ik denk dat het een keuze is die je moet maken nadat je de suggesties op een rijtje hebt :)

[ Voor 21% gewijzigd door mithras op 21-11-2010 15:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op maandag 22 november 2010 @ 23:13:
[...]

Ik geloof dat ik nog best genuanceerd was, maar goed, als je het zo graag wil: een compleet framework gebruiken voor iets dat je in een handvol functiecalls net zo makkelijk zelf schrijft is niet bepaald een goeie zet.
Dan lijkt het erop dat jij en ik elk een andere definitie hanteren van nuance. :+

Bovendien zie ik hier niemand in dit topic iets zeggen over het gebruiken van een compleet framework voor een handvol functiecalls, enkel adviezen over het gebruik van losse componenten van een bepaald framework (hier Zend Framework) om zo de doelen van de TS te bewerkstelligen. Of liever gezegd, het makkelijker maken tot.
Ik snap niet dat hier zo fel op wordt gereageerd (nota bene door moderators??) waarbij ZF wordt afgedaan als "logge rotzooi". Wellicht dat jullie met het verkeerde been uit bed zijn gestapt, dat kan natuurlijk ook. :)

[ Voor 4% gewijzigd door Verwijderd op 23-11-2010 00:20 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je zou ons eens moeten zien als we écht met het verkeerde been uit bed gestapt zijn. :P

ZF (of onderdelen daarvan) zullen best goed werken in bepaalde situaties maar in dit topic is het gewoon zware overkill. MueR en ik hekelen dat er zo snel gegrepen wordt naar een log framework in plaats van dat mensen gewoon een simpele eigen functie schrijven.

Ik ben zelf ook een voorstander van het schrijven van je eigen framework voor PHP. Voor andere talen heb ik die mening niet, maar wat PHP betreft zijn er wat tekortkomingen in de taal én in het Zend Framework en je bent gewoon beter af als je die gaten zelf bewust dicht, IMO.

Anyway, ontopic: ik heb even mijn code opgezocht:
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
43
44
45
46
47
class LDAPConnection
{
    private $connection;
    private $domainId;
    private $domainName;
    private $serverAddress;
    private $serverPort;
    private $baseDN;
    
    function __construct($domainId)
    {
        global $db;
        
        $query = $db->Query("SELECT * FROM Domain WHERE DomainId = %domainId", array('domainId' => $domainId));
        if (!($result = $query->FetchObject()))
            throw new Exception(l('error-invalid-active-directory-domain'));
        
        $this->domainId          = $domainId;
        $this->domainName       = $result->DomainName;
        $this->serverAddress     = $result->ServerAddress;
        $this->serverPort       = $result->ServerLDAPPort;
        $this->baseDN           = $result->LDAPBaseDN;
        
        $this->connection = @ldap_connect($this->serverAddress, $this->serverPort);

        @ldap_set_option($this->connection, LDAP_OPT_PROTOCOL_VERSION, 3);
        @ldap_set_option($this->connection, LDAP_OPT_REFERRALS, 0);
    }
    
    function __destruct()
    {
        @ldap_close($this->connection);
    }

    public function Login($username = null, $password = null)
    {
        $username = $this->Escape($username);
        $password = $this->Escape($password);
        
        if (!$this->connection || empty($password))
            return false;

        if (@ldap_bind($this->connection, "CN=$username,CN=Users," . $this->baseDN, $password))
            return true;
        return false;
    }
}

Heb een deel van de class weggelaten (zoals mijn escapefunctie) maar een en ander lijkt me wel redelijk duidelijk. Ik zie overigens wel dat ik redelijk gul ben geweest met error suppression, maar goed; als inloggen op intranet niet lukt om wat voor reden dan ook dan gaan we sowieso even checken of AD nog wel goed werkt. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb een deel van de discussie (alle posts die grotendeels het welles-nietes over het Zend Framework bevatten) afgesplitst naar Zend Framework: wanneer wel en wanneer niet?. Daar verder met die discussie asjeblieft. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
NMe: Super bedankt! Dat is een goed begin om mee verder te gaan! :D
Pagina: 1