LOCAIS

ARQUIVO

ASSINE OS FEEDS

Software Livre

Dicas de sites

Publicidade


SSD Virtual Server 5$/mo HD 20GB 512Ram





Publicado em 26 de fevereiro de 2009 ás 19:51

fazendo autenticação via PHP + LDAP

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&aacute;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;
}
?>

     ,

  • por Édson Kuzniewski (Br0w)
  • LDAP, PHP

10 Comentários em “fazendo autenticação via PHP + LDAP”

  1. Bruno em 17 de março de 2009 às 18:57 disse:

    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é

  2. Édson Kuzniewski (Br0w) em 17 de março de 2009 às 22:08 disse:

    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!

  3. Robson Silva em 19 de março de 2009 às 08:33 disse:

    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.

    robsonsbrasil@hotmail.com

    Obrigado

  4. Édson Kuzniewski (Br0w) em 21 de março de 2009 às 15:19 disse:

    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!

  5. Antonio Edirane em 12 de maio de 2009 às 01:55 disse:

    Onde eu configuro o LDAP do Windows Server 2008 para que a pesquisa de dados seja liberada sem a autenticação ?

  6. Bruno em 03 de julho de 2009 às 17:18 disse:

    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??

  7. Édson Kuzniewski (Br0w) em 03 de julho de 2009 às 18:54 disse:

    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!

  8. Édson Kuzniewski (Br0w) em 03 de julho de 2009 às 18:55 disse:

    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!

  9. Diek2 em 26 de outubro de 2010 às 09:31 disse:

    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…

  10. Vagner em 21 de novembro de 2011 às 08:28 disse:

    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;

Deixe seu comentário

  1. *