Lightweight Directory Access Protocol, ou LDAP, é um protocolo de pesquisa e atualização de diretorios sobre TCP/IP, geralmente seguinto o modelo de uma árvore de nós, cada um consistindo de um conjunto de atributos com seus respectivos valores. Não vou prolongar na explicação do LDAP porque não é este o objetivo quem quiser mais informação sobre o protocolo e como ele funciona sugiro este link ou pesquisa no Google. O objetivo é explicar uma classe de conexão a este serviço via PHP.
Onde e para que podemos usar isso?
Bom onde e pra que todo mundo tá usando ‘centralização de senhas e dados comuns de usuários’. Atraves deste protocolo seus usuário podem ter um unico login e senha para todos os serviços, REDE, EMAIL, SISTEMAS e o que mais a imaginação quiser.
O PHP tem suporte a este protocolo desde a versão 4.X e vem aperfeiçoando a cada nova versão e para que funcione basta que o servidor que esta rodando o PHP esteja com o módulo LDAP ativo, se houver necessidade e pedidos posso postar depois como instalar módulos no PHP em Windows e Linux.
Chega de conversa vamos ao código:
<?php
class LdapClass{
public $ds = '';
public $server_ldap = '<IP OU NOME DO HOST SERVER LDAP>';
public $dn_ou_ldap = '<ARVORE DE USUARIOS DA ORGANIZACAO EX: ou=users, dc=bladop, dc=com, dc=br>';
public $dn_ou_groups_ldap = '<ARVORE DE USUARIOS DA ORGANIZACAO EX: ou=groups, dc=bladop, dc=com, dc=br>';
function con(){
$this->ds = ldap_connect($this->server_ldap);
}
function conexao($user,$senha,$destino){
$this->con();
if ($this->ds){
// AUTENTICA USUÁRIO
$r=@ldap_bind($this->ds,"uid=" . $user . ", " . $this->dn_ou_ldap,$senha);
if ($r){
// BUSCA DADOS DO USUARIO PELO LOGIN
$d_user = ldap_search($this->ds, $this->dn_ou_ldap, "sn=" . $user . "");
// PEGA OS GRUPOS OU SETORES AO QUAL ELE PERTENCE
$d_setor = ldap_search($this->ds, $this->dn_ou_groups_ldap, "memberUid=" . $user . "");
$d_user_ = ldap_get_entries($this->ds, $d_user);
$d_setor_ = ldap_get_entries($this->ds, $d_setor);
// MONTA VARIAVEIS DE AMBIENTE PARA O USUARIO - VC PODE PERSONALIZAR DE ACORDO COM SEU CONHECIMENTO
// NA ARVORE LDAP DE SUA ORGANIZAÇÃO
$_SESSION['login'] = $d_user_[0]["cn"][0];
$_SESSION['nome'] = $d_user_[0]["displayname"][0];
$_SESSION['setor_nome'] = $d_setor_[1]["cn"][0];
$_SESSION['setor_uid'] = $d_setor_[1]["gidnumber"][0];
$_SESSION['user_uid'] = $d_user_[0]["uidnumber"][0];
// FECHA CONEXAO E DIRECIONA O USUARIO
ldap_close($this->ds);
header('Location: ' . $destino);
}else{
// USUARIO OU SENHA INVALIDOS
ldap_close($this->ds);
return false;
}
}else{
// NAO FOI POSSIVEL CONECTAR AO SERVIDOR
return false;
}
}
}
?>
?>
Acredito que o código em si esteja auto-explicativo, duvidas e sugestões podem ser feitas via Post e estudar um pouquinho a mais também ajuda:
http://br.php.net/manual/pt_BR/book.ldap.php
Abraço a todos.
Arquivado em: PHP5, Programação | Etiquetado: AD, ldap, PHP5
Acharia interessante (apesar de não programar mais em php) se fosse feito uma classe para essas funções
Olá Arx, obrigado por seu comentário.
Na verdade existe sim uma classe para estas funções, mas como a intenção era mostrar apenas a conexão com o LDAP achei melhor não coloca-la, por questão de didatica.
Forte Abraço
Salve,
Oh porra que cor de código é essa? Está foda de ler.
Vou colocar ldap no meu note e testar autenticação.
Valeu!