Autenticação de usuário em Servidores Windows via função ldap do PHP

Recentemente precisei fazer uma implementacao de autenticacao LDAP com um programa Monitor de ocorrencias (Ocomon), este post me ajudou muito espero que sirva pra alguem tb….

Este post é direcionado ao desenvolvedores em php que desejam implementar acesso direto aos servidores Windows via Active Directory (AD).

Utilizaremos a função do php inerentes ao protocolo LDAP, então: vamos entender melhor.

O que é o LDAP?
O Lightweight Directory Access Protocol (LDAP) é um protocolo para acesso e modificação de informações de diretórios através da rede.
O LDAP permite que você localize pessoas, organizações, e outros recursos tais como arquivos e dispositivos na rede, seja na Internet ou numa Intranet.

Para entendermos melhor podemos tomar como comparação os programas de banco de dados. O MySQL, MSSQL Server e Oracle dentre tantos outros são SGBDs com características e definições próprias,
mas para qualquer um a linguagem universal de comunicação e acesso a dados é o SQL. O LDAP nada mais é, do que a linguagem de comunicação entre qualquer aplicação com o Active Directory (AD).

Mais informações sobre o LDAP:
- LDAP Zone http://www.ldapzone.com/
- ldapman.org http://www.ldapman.org/ (apresenta alguns bons artigos introdutórios).
- The LDAP Schema Repository http://ldap.akbkhome.com/ (esse é indispensável).

Isto depende muito do cenário tecnológico no qual que você se encontra:
- O primeiro requisito mínimo indispensável para que você possa desfrutar desta tecnologia, é ter acesso a um ambiente que conte com algum servidor da plataforma WINDOWS que ofereça o recurso do AD (Active Directory).
- O segundo requisito é você entender a estrutura do AD de seu domínio. Se a empresa no qual trabalho tem uma árvore de AD muito vasta e complexa, contando com muitos usuáios subdivididos em vários domínios e em suas respectivas Ous (Organizations Units). Se você não entende muito bem essa linguagem, recomendo que pesquise informações sobre como funciona o AD antes de prosseguir, abaixo seguem link de sites que podem ajudar no processo de aprendizado sobre o AD:

- http://www.microsoft.com/brasil/technet/centralwindows/centromigracao/activedirectory/gerenciando.mspx
- http://support.microsoft.com/default.aspx?scid=kb;en-us;325284

Agora que já conhece o PHP, LDAP e o AD, você tem respaldo suficiente para analisar (tomando como base o contexto no qual sua empresa ou cliente esta inserido) para avaliar se esta é a melhor solução a se adequar ao seu caso.
Lembre-se cada caso é um caso, e por isso devemos analisar cuidadosamente todos os casos antes de definir qual o melhor método de autenticação para nossa(s) aplicação(ções).

Agora podemos começar as configurações do php e, se necessário: o servidor também, com adição com cópias de dll’s.

Servidor:
Precisa verificar se há três dll na pasta system32, caso não localize-as e faça uma cópia dessas para a pasta em questão: system32.
libsasl.dll
libeay32.dll
ssleay32.dll
Depois disso reinicie o servidor.

PHP:
Para poder habilitar o suporte ao LDAP em um ambiente com Apache/PHP é necessário seguir os seguintes passos:
- Abrir o arquivo php.ini e descomentar a linha:
;extension=php_ldap.dll

- Em seguida restartar o serviço do Apache

Testando a conexão:

Acessando o AD com PHP
Primeiro para acessar um servidor AD devemos indicar ao PHP qual o servidor queremos conectar e criar uma conexão, para isso usamos a função:
ldap_connect(”servidor”);

O uso desta função é bem simples, abaixo segue um exemplo:

<?php
if (!($conexao = @ldap_connect(”127.0.0.1″))) {
die(”Não foi possével se conectar com o servidor de AD”);
} else {
echo “Conectado com sucesso !!!”;
}
?>

No exemplo acima $connect é a variável que irá receber o ponteiro da conexão caso o PHP consiga estabelecer uma conexão com o AD. Como pode ter observado “127.0.0.1″ é o IP do servidor, mas também poderíamos se comunicar com o servidor AD pelo nome sem problemas.

<?php
if (!($conexao = @ldap_connect(”localhost”))) {
die(”Não foi possével se conectar com o servidor de AD”);
} else {
echo “Conectado com sucesso !!!”;
}
?>

OBS: Não se esqueça que o parâmetro de connect(); tem de ser uma string.

Agora que já conectamos ao servidor é necessário efetuarmos a autenticação com o mesmo, para isso o php tem a função:

ldap_bind($connect, $user, $password);

Exemplo:

<?php
if (!($conexao = @ldap_connect(”localhost”))) {
die(”Não foi possível se conectar com o servidor de AD”);
} else {
echo “Conectado com sucesso !!!<br>”;
}

if (!($bind = @ldap_bind($conexao, $usuario, $senha))) {
//se não validar
echo “Usuário ou senha incorretos !!!”;
} else {
//se validar
echo “Usuário autenticado !!!”;
}
?>

Após ter conectado com o servidor o ponteiro para esta conexão é armazenado na variável $connect que é passado para a função ldap_bind();

Os outros dois parâmetros desta função são um usuário e uma senha válidos no AD. Uma observação importante é que usuário na verdade é composta da seguinte forma: “DOMINIO\USUARIO”

Caso o domínio da minha empresa seja “´portalwepe.com” e eu queira autenticar o usuário “evaldo” o script ficaria da seguinte forma:

<?php
if (!($conexao = @ldap_connect(”localhost”))) {
die(”Não foi possível se conectar com o servidor de AD”);
} else {
echo “Conectado com sucesso !!!<br>”;
}

if (!($bind = @ldap_bind($conexao, “portalwebpe.com\evaldo”, $senha))) {
//se não validar
echo “Usuário ou senha incorretos !!!”;
} else {
//se validar
echo “Usuário autenticado !!!”;
}
?>

~ por aeciotr em outubro 30, 2008.

3 Respostas to “Autenticação de usuário em Servidores Windows via função ldap do PHP”

  1. muito bom !!!!! parabens !

  2. Foi de grande ajuda, muito bem explicado.
    Obrigado.

  3. Ao se conectar com o servidor LDAP , vc consegue logar tanto nos usuarias da pasta users quantos os que estão em unidades organizacionais…

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.