segunda-feira, 23 de março de 2009

PHP Autenticando em Servidor Active Directory

Olá, nesta postagem mostrarei em poucas palavras como se dá a autenticação de usuários em um servidor Active Directory utilizando a linguagem PHP.

Legenda:
OU = Organizational Unit (Unidade Organizacional)
DC = Domain Controller (Controlador de Domínio)
CN = Common Name (Nome Comum)
AD = Active Directory

Objetivos:
  1. Utilizando o usuário "admin@dominio.com.br" autenticar no servidor AD.
  2. Com o pré-suposto que o usuário "admin@dominio.com.br" tenha privilégios de administrador, buscar uma lista de usuários a partir de um nome informado pelo usuário.
Estudo de Caso:

1. Construindo o formulário que enviará o nome do usuário que se busca no AD
<form action="" method="post">
<label>Digite o nome ou parte do nome que deseja buscar</label>
 
<input type="text" name="usuario" id="usuario">
 
<input type="submit" name="submit" id="submit" value="Buscar...">
    
<form>

2. Autenticando no Servidor AD
// Conectando ao Servidor de Diretórios $ad = ldap_connect("192.168.1.5") or die("Não foi possível se comunicar com o AD!"); ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
// Amarrando com o Servidor de diretórios
if(!$bd = ldap_bind($ad, 'admin@dominio.com.br', 'M1Nh@S3nH4')){
print("Não foi possível conectar ao servidor Active Directory!(". ldap_err2str(ldap_errno()) .")");
exit;
}

3. Recuperando a lista de usuários
$dn = "DC=dominio,DC=com,DC=br"; $filter = "(cn=*";
$filter .= trim($_POST['usuario']);
$filter .= "*)";
$result = ldap_search($ad, $dn, $filter);

4. Exibindo a listagem de usuários utilizando o filtro
$entries = ldap_get_entries($ad, $result);
for ($i=0; $i<$entries["count"]; $i++){
if (
(
(
$entries[$i]["objectclass"]["count"] == 5 &&
strtolower($entries[$i]["objectclass"][5]) == "user"
) ||
$entries[$i]["objectclass"]["count"] == 4
) && $entries[$i]["displayname"][0] != ""
){
$data = $entries[$i]["whencreated"][0];
$ano = substr($data,0,4);
$mes = substr($data,4,2);
$dia = substr($data,6,2);
$hora = substr($data,8,2);
$min = substr($data,10,2);
$sec = substr($data,12,2);

$data = $dia . "/" . $mes . "/" . $ano . " " . $hora . ":" . $min . ":" . $sec;

print("Nome:" . $entries[$i]["displayname"][0] . "");
print("Conta criada em:" . $data . "\n");
print("Celular:" . $entries[$i]["mobile"][0] . "");
print("E-mail:" . $entries[$i]["mail"][0] . "");
}//Fim se
}//Fim For

Um comentário: