Fazendo um sistema de autenticação com PHP + LDAP.
primeiramente cria um formulário no qual você vai passar os dados de usuário e senha:
login.html
<form id="form" action="autenticacao.php" method="post"> Usuário: <input id="usuario" name="usuario" size="30" type="text" /> Senha: <input id="senha" name="senha" size="30" type="password" /> <input name="Submit" type="submit" value=" Entrar " /> </form>
agora vamos fazer nossa autenticação com o sistema LDAP.
autenticacao.php
<?php session_start(); /** * * Criado por Édson Kuzniewski (contato Θ edsonk.com.br) * 18-12-2008 * **/ // FAZENDO A AUTENTICAÇÃO if(!isLogin($_POST['usuario'], $_POST['senha'])){ die("Usuário ou senha incorreto... Informe os mesmos dados de acesso da rede LDAP. <a href=\"javascript:history.go(-1)\">voltar</agt;"); }else{ echo "Usuário autenticado com sucesso!"; } // função para fazer a autenticação com o LDAP. function isLogin($usuario,$senha){  global $sessao;  /* DEFINE A VARIAVEL $PERSON COMO USUÃRIO */  $person = $usuario; /* DEFINE O NOME OU IP DO SERVIDOR LDAP */  $servidor="ldap"; /* DEFINE A PORTA DE ACESSO AO SERVIDOR LDAP */  $porta = "389"; /* FAZ CONEXÃO COM O SERVIDOR LDAP */  $ds = ldap_connect($servidor, $porta); /* DEFINE O DN DO SERVIDOR LDAP */  $dn = "ou=Users, dc=edsonk, dc=com"; /* DEFINE O FILTRO PARA PEGAR OS DADOS DO USUÃRIO */  $filter="(|(sn=$person*)(givenname=$person*)(uid=$person))"; /* EXECUTA O FILTRO NO SERVIDOR LDAP */  $sr=ldap_search($ds, $dn, $filter); /* PEGA AS INFORMAÇÕES QUE O FILTRO RETORNOU */  $info = ldap_get_entries($ds, $sr); /* PEGANDO SOMENTE O VALOR DO DN DO USUÃRIO DO LDAP PARA FAZER A AUTENTICAÇÃO */  $cnC = $info[0]["dn"]; /* FECHA CONEXÃO COM O LDAP */  ldap_close($ds); /* EXECUTA COMANDO INTERNAMENTE NO SERVIDOR PARA FAZER A AUTENTICAÇÃO COM A SENHA */  $comando = "ldapsearch -x -w ".$senha." -D '".$cnC."' uid='".$person."' uidNumber"; /* PEGA O RESULTADO DO COMANDO E JOGA PARA A VARIAVEL $OUTPUT */  $rs = exec($comando, $output); /* FAZ A VERIFICAÇÃO PELO RESULTADO, SE NÃO RETORNAR BRANCO É QUE O USUÃRIO FOI AUTENTICADO COM SUCESSO! */  if($rs != ""){  //echo"Logado com sucesso!"; /* PEGANDO O UIDNUMBER DO USUÃRIO, QUE CONSTA NO LDAP, SERIA COMO UM CODIGO UNICO */ $tmp = explode(" ", $output[10]); /* PEGANDO O UIDNUMBER E JOGANDO NA SESSÃO DO USUÃRIO */  $_SESSION[$sessao]["user"]["uid"] = $tmp[1]; /* DEFINE A FLAG PARA VERDADEIRA */  $retorna = true; }else{  //echo "Usuário ou senha incorretos!"; $retorna = false;  } if($_SESSION[$sessao]["user"]["usuario"] != ""){ $retorna = true; } return $retorna; } ?>
Olá!
Quero adaptar este sistema de login LDAP num site, tenho andado a ler algumas coisas sobre o assunto, mas tenho uma questão que julgo que saibas responder. Para utilizar esta forma de autenticação LDAP é necessário instalar algum coisa?
Cumprimentos,
Bruno José
bem, primeiramente, verifique se o extension LDAP do php está ativo, para poder utilizar as funções do LDAP no php, e claro se seu LDAP tem a busca ou pesquisa de dados liberado sem a autenticação, pois no primeiro momento eu faço a verificação dos dados resultantes da pesquisa pelo UID, usuário, para poder pegar o CN completo do usuário, para que no próximo passo faço uma busca utilizando o CN completo e a senha do usuário que consta no LDAP, não sei se isto responte tua pergunta, mas qualquer coisa estamos ai!
falow!
Bom dia Édson,
Testei o script aqui e nao conseguir ter resultado gostaria de uma ajuda sua, nunca fiz esse tipo de autenticação, ele mostra o seguinte erro:
Warning: ldap_search(): Search: Operations error in c:\arquivos de programas\easyphp1-8\www\ldap\autenticacao.php on line 44
Warning: ldap_get_entries(): supplied argument is not a valid ldap result resource in c:\arquivos de programas\easyphp1-8\www\ldap\autenticacao.php on line 47
Notice: Undefined index: in c:\arquivos de programas\easyphp1-8\www\ldap\autenticacao.php on line 79
Usuário ou senha incorreto… Informe os mesmos dados de acesso da rede LDAP. voltar
Gostaria de saber quais informações colocar em
$dn = “ou=Users, dc=edsonk, dc=com”;
e o q significa cada uma delas.
Se possÃvel manda a resposta para meu email por favor.
[email protected]
Obrigado
Bem como posso te dizer, o DN do LDAP pode-se dizer que é o banco de dados do LDAP onde se encontra os dados de usuário, grupos e etc do LDAP, e este DN é o mesmo que foi informado no arquivo de configuração de seu LDAP, como você pode ter uma idéia neste artigo do site linux.org: http://br-linux.org/tutoriais/002995.html
neste arquivo “/usr/local/etc/openldap/lapd.conf” você tem as configurações procure pela linha onde indica o seguinte:
BASE dc=edsonk,dc=com,dc=br como exemplo…
sendo assim DN é o campo onde tem o nome do usuário na base do LDAP;
ou= seria um grupo especifico de onde você quer pesquisar no LDAP,
e o dc= seria o local da base podemos dizer;
então tu pode simplesmente tirar o “ou=Users” que tem no DN e deixar somente o DC para localizar o ususário.
se precisar de mais informações do LDAP no próprio Google você acha muitos tutorias e artigo de como configurar ele,
então resumindo a responta pelo meu ponto de vista é o DN não esta correto, e não esta conseguindo se comunicar com o LDAP corretamente.
caso tenha mais alguma dúvida é so reportar….
valeu!
Onde eu configuro o LDAP do Windows Server 2008 para que a pesquisa de dados seja liberada sem a autenticação ?
Bom dia Édson.
Este script funcionou muito bem, so tenho uma pequena duvida, e possivel fazer o php retornar do ldap todos os usuarios cadastrados??
Opa Bruno, tem sim, se não me engano é só tu tirar o filtro da busca… neste link te mostra a função com é usada: http://www.php.net/manual/pt_BR/function.ldap-search.php, e tem outros sites de referência no qual tu pode ver a função executada diretamente no linux: http://linux.die.net/man/1/ldapsearch e também nesse outro site: http://www.istf.com.br/vb/archive/index.php/t-13873.html, espero que isso te ajude… falow!
opa, Antonio Edirane, não vou poder te ajudar, pois servidores windows não sei de nada quase… hehehe é só cheguei a usar e mecher com o LDAP no linux… falow!
Olá pessoal,
testei este código e depois que digito o usuário e senha, a tela seguinte aparece em branco, o IP, dn, porta, esta tudo certo mas não autentica. será que o problema esta no ldap? se alguém pudér ajudar eu agradeço…
Bom dia, estou tentando usar seu código mais ele apresenta um erra na variavel global.
18 // função para fazer a autenticação com o LDAP.
19 function isLogin($usuario,$senha){
20 Â global $sessao;
21
22 /* DEFINE A VARIAVEL $PERSON COMO USUÃRIO */
23 Â $person = $usuario;