Server LDAP ověřování uživatelů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kralik
Člen | 230
+
0
-

Ahoj,

prosím nemáte někdo zkušenosti jak provádět ověřování přes LDAP server a jak obdržet od něj např. roli uživatele v závislosti na figurování uživatele v určitě složce na serveru?

Mooc díky

Jamicon
Člen | 19
+
0
-

V gentoo existuje takýto balík:

* net-nds/phpldapadmin
     Available versions:
        (1.2.0.4-r1)    ~1.2.0.4-r1
        (1.2.0.5)       ~1.2.0.5
        {vhosts}
     Homepage:            http://phpldapadmin.sourceforge.net
     Description:         phpLDAPadmin is a web-based tool for managing all aspects of your LDAP server.

Skús si stiahnuť zdrojáky a pozrieť do nich, LDAP som na serveri skúšal, ale potom som to vzdal (doma ho nepotrebujem)

kralik
Člen | 230
+
0
-

Vlastní Authenticator.php

<?php

use  Nette\Object,
	  Nette\Environment,
	  Nette\Security\Identity,
	  Nette\Security\IAuthenticator,
	  Nette\Security\AuthenticationException,
	  Model\Funkce;

class Authenticator extends Object implements IAuthenticator
{

public function authenticate(array $credentials)
	{            //zde se hledaji uzivatele, nutne zmenit
	             //zaznam o uzivateli: uid=svoboda,ou=People,o=cb,dc=mojefirma,dc=cz
                $dn[0]='ou=People,o=cb,dc=mojefirma,dc=cz';
                $dn[1]='ou=People,o=plzen,dc=mojefirma,dc=cz';
                $dn[2]='ou=People,o=praha,dc=mojefirma,dc=cz';

                $username = $credentials[self::USERNAME];
		          $password = $credentials[self::PASSWORD];

                $ldap_conn = ldap_connect ('ldap://ldap.mojefirma.cz'); //adresa nebo IP overovaciho serveru
                    if ($ldap_conn) {

                        $i=-1;
                        $d=count($dn)-1; //velikost pole

                        do {
                          $bindDn = NULL;
                          $i++;

                          if($i>$d){
                            break; //ruční zruseni cyklu pri nenalezeni uzivatele
                          }else{
                            $bindDn = sprintf("uid=%s, %s", $username, $dn[$i]);
                            $ldapbind = @ldap_bind($ldap_conn, $bindDn, $password); //pripojeni k LDAP serveru a overeni
                          }

                        }
                        while(!$ldapbind);

                        if ($ldapbind) { //uživatel overen ok

                            $filter="(|(uid=$username))"; //vyber pouze daneho uzivatele (uid)
                            $justthese = array("cn","employeeNumber","mail"); //chci ziskat pouze tyto 3 atributy
                            $sr = ldap_search($ldap_conn, $bindDn, $filter, $justthese); //vyhledani atributu

                            $info = ldap_get_entries($ldap_conn, $sr);

                            $oscislo = (int)$info[0]['employeenumber'][0];//string to int, funkce ldap_get_entries vraci pole
                            $row = Funkce::findUser($oscislo); //funkce pro zjisteni role z DB a tab users
                            $identity = new Identity($row->id, $row->role); //id,role
                            $identity->name = $info[0]['cn'][0]; //nacitano z LDAP
                            $identity->oscislo = $oscislo;
                            $identity->mf = $row->manufactory;
                            $identity->zavod = $row->zavod;

                            return $identity;

			} else {

                            throw new AuthenticationException("Uživatel nenalezen nebo špatné přihlášení.", self::INVALID_CREDENTIAL);
                	}


                } else {
		                throw new AuthenticationException("Ověřovací server není dostupný.", self::FAILURE);

		}
                ldap_unbind ($ldap_conn);

        }
}
?>
baz
Člen | 42
+
0
-

Ahoj,
našel jsem zde zmínku o ldap.
Mám s ním také jeden problém, tak se jako tonoucí chytám stébla…

potřeboval bych zprovoznit pro podobné účely ldaps viz: https://forum.nette.org/…tu-pro-ldaps#…

Předem díky, za jakékoliv rady.

Otto

wb2009
Člen | 125
+
0
-

Ahoj, doporučuji stáhnout knihovnu od: http://adldap.sourceforge.net/
hodit si jí do libs, robotloader jí requrne a pak už jen upravit si authenticator na ověřování uživatele přes tutu knihovnu :). Umí toho mnohem víc, my v práci s ní naprosto v pohodě pracujeme.

To: baz
V odkazu výše máš i rady co vše nastavit na apachi, případně se to řeší i na různě na stackflow atd.
Případně napiš co ti to hází z laděnky :)

Editoval wb2009 (5. 6. 2013 22:06)

baz
Člen | 42
+
0
-

Díky za odpověď, ale na téhle stránce jsem byl a podle jejich návodu zkoušel postupovat (http://adldap.sourceforge.net/wiki/doku.php?…)
ale nepomohlo.

Nemám totiž problém s prací s ldap. Mám již vyřešené, připojení, search, vytváření skupin i uživatelů, jejich editaci, odebírání apod.

Jenže zásadní problém je když potřebuji měnit heslo u uživatele – to totiž lze pouze s ldaps a to právě nemůžu zprovoznit :-(

O.

wb2009
Člen | 125
+
0
-

Jo takhle, no to asi neporadím, popravdě my z toho se v práci jenom přihlašujeme, max taháme informace o uživateli, což s pomocí, téhle knihovny jsme mohli naprosto bez problému. Editovat, mazat nemůže, to by nás naše IT asi zabilo :) Jediný oříšek co jsme řešili, bylo rozklíčovat SID uživatele, protože to jsme dostávali v nějakém hashi. Naštěstí na netu jsme objevili magickou funkci pod názvem „little indian“, která nám to rozhešovala :)

Takže ti to asi ani nehází nějakou smysluplnou chybu, podle které by se dalo něco zjistit co?

baz
Člen | 42
+
0
-

Nakonec jsem to dnes v ranních hodinách vyřešil.

Šlo o to, že ldap potřebuje config pro nastavení zacházení s certifikáty.
Všude na netu píšou, že je natvrdo nastavená na c:\ldap\sysconf\ldap.conf.

Při metodě pokus omyl jsem zjistil, že soubor ldap.conf musí být přímo v rootu.
(Nejspíš je to závislé na verzi PHP, nebo Apache, jinak si to nedokážu vysvětlit)

Každopádně, teď už jsem přes LDAPS (SSL varianta) připojen..