Conectando no LDAP

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

http://www.openldap.org/

Abraço a todos.

3 Respostas

  1. Acharia interessante (apesar de não programar mais em php) se fosse feito uma classe para essas funções :D

  2. 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

  3. Salve,

    Oh porra que cor de código é essa? Está foda de ler.

    Vou colocar ldap no meu note e testar autenticação.

    Valeu!

Deixe uma resposta