Články
Autentizace uživatele vůči AD v PHP
Článek navazuje na teoretický úvod Adresářové služby a LDAP a Autentizace v LDAPu (AD). A praktické ukázky použití LDAPu v Jak na LDAP a LDAPS v PHP pod Windows. Věnuje se prakticky možnosti, jak autentizovat uživatele vůči Active Directory pomocí kódu v PHP.
Jak bylo zmíněno v článku o autentizaci v LDAPu, tak pro autentizaci uživatele můžeme v praxi použít právě protokol LDAP a jeho operaci bind. Jinou možností by byla nějaká externí služba, například RADIUS server. Pomocí LDAP bind máme dvě možnosti, buďto simple bind nebo SASL bind.
Simple bind
Nejjednodušší metoda, ale také nejméně bezpečná, je použití simple bind. V tomto případě se veškerá (autentizační) data přenáší v plain textu, tedy čistém a nešifrovaném textu. Adresářovým službám zasíláme uživatelské jméno ve tvaru DN (Distinguished Name), tedy třeba CN=Uzivatel,OU=Users,DC=firma,DC=local. V praxi jsem ověřil, že pro Active Directory je možno použít jméno i v UPN tvaru (User Principal Name) , tedy uzivatel@firma.local, nebo ve tvaru doména\uživatelské jméno.
Protože se heslo posílá v čistém textu, tak se určitě doporučuje použít přenos přes šifrovaný kanál. Můžeme použít SSL nebo TLS. Já používám SSL a tedy LDAPS.
Pozn.: Důležité upozornění je, že je třeba kontrolovat, zda uživatel nezadal prázdné heslo, protože AD by pak uvažovalo anonymní přihlášení a vrátilo by true.
function authUserAD($username, $password, $DomainName="firma.local", $ldap_server="ldaps://192.168.0.1") {
$auth_user = $username."@".$DomainName;
if($connect = ldap_connect($ldap_server)){
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
if(ldap_bind($connect, $auth_user, $password)) {
ldap_close($connect);
return(true);
}
}
ldap_close($connect);
return(false);
}
if(authUserAD("uzivatel", "Heslo")) echo "<p>Přihlášení je OK.</p>";
else echo "<p>Přihlášení se nezdařilo.</p>";
SASL bind
Podle poznámek u LDAP funkcí, PHP podporuje SASL. Je potřeba, aby bylo PHP zkompilováno s podporou SASL a vyžaduje knihovny libeay32.dll, ssleay32.dll (případně ještě libsasl.dll). PHP verze 5 obsahuje funkci (v podstatě nedokumentovanou) ldap_sasl_bind. Tu se mi však nepodařilo rozchodit, nezískal jsem pro Windows verzi PHP se SASL podporou.
Další možnosti
Jinou možností je využít nějaký modul pro Apache server (nebo použít IIS). Navíc tyto moduly většinou umožňují využít SSO (Single Sign On), pokud to podporuje klient.
- mod_ntlm
- mod_ntlm2
- mod_auth_ntlm_winbind
- mod_auth_sspi
- mod_auth_gssapi
- kerb_auth_mod
- mod_auth_kerb
Související články:
LDAP a Active Directory
- Adresářové služby a LDAP [14.09.2007 14:11]
- Autentizace v LDAPu (AD) [28.10.2007 14:32]
- Jak na LDAP a LDAPS v PHP pod Windows [02.11.2007 16:52]
- Autentizace uživatele vůči AD v PHP [06.11.2007 18:18] právě čtete
- Rozšíření Active Directory Users And Computers o editaci employeeID [03.12.2007 14:25]
- Active Directory komponenty - domain, tree, forest, site [08.02.2008 19:01]
- Převod domény z Windows Server 2003 na Windows Server 2008 R2 [31.03.2010 08:47]
linkuj.cz | jagg.cz | vybrali.sme.sk | del.icio.us.
Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže. Pokud chcete poradit s nějakým problémem či diskutovat na nějaké téma, tak použijte fórum.

Komentáře
Zatím tento záznam nikdo nekomentoval.