Server LDAP ověřování uživatelů
- Jamicon
- Člen | 19
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
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
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
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
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
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
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..