Um detalhe em que trabalhei neste ultimo mês foi interação de sistemas Flex com LDAP, para fazer logon único em todos os sistemas. Imagina que a empresa ao qual você precisa desenvolver o sistema, possui um sistema de domínio(LDAP) onde todos os usuários já possuem login, senha e cadastro completo, e política de senhas predefinidas.
Então para que montar todo um sistema de cadastro de usuários, tendo o usuário um novo login, uma nova senha, um novo cadastro?
Então neste Post tratarei sobre a integração de sistemas com o serviço de diretório.
Antes de começar você deve entrar em contato com o responsável pelo LDAP na empresa e solicitar a estrutura da árvore da empresa (Se você não esta entendendo nada, sugiro que leia a documentação do LDAP antes). Ele passará algo como:
SERVER: intranet.mxml.com.br
PORT: 389
BASE: dc=mxml,dc=com,dc=br
USERNAME: cn=UserSistemaDoAlemao,dc=mxml,dc=com,dc=br
PASSWORD: SenhaDeAcesso
FILTER: (&(ObjectClass=person)(Atrubuto2=SuaEscolha))
ATTRIBUTE: uid
Com estes dados entra o primeiro problema, acalmar o desespero de como usar todos estes dados, e como vou faze-lo em PHP? Procurar no Google, bla, não achei nada de exemplo. Então no PHPbrasil achei algo que começou a me ajudar. Autenticando no Active Directory com PHP via LDAP.
Porém no caso da empresa em questão não estava funcionando como eu queria, Então cheguei até o LDAPSearch, Este me ajudou em muito neste inicio de carreira com o LDAP.
O código PHP que faz esta conexão esta abaixo:
<?php
// Atributos para conexão
$m_server = "intranet.mxml.com.br";
$m_port = 389;
$m_basedn = "dc=mxml,dc=com,dc=br";
$m_USER_ADM = "cn=UserSistemaDoAlemao,dc=mxml,dc=com,dc=br";
$m_USER_PW = "SenhaAdmin";
$m_USER = "alemao";
$m_PW = "SenhaAlemao";
$m_search = "(&(ObjectClass=person)(Atrubuto2=SuaEscolha))";
// Abre a conexao com o banco dee dados
$m_ds = @ldap_connect($m_server, $m_port);
// Faz logim como administrador
@ldap_bind($m_ds, $m_USER_ADM, $m_USER_PW);
$m_sucess = false;
// Faz a busca pelo usuário em toda arvore do LDAP
$m_sr = @ldap_search($m_ds, $m_basedn, sprintf($m_search, $m_USER));
// conta quantas resultados foram obtidas
$n_entradas = @ldap_count_entries($m_ds, $m_sr);
// Se possuir um ou mais usuarios, o usuario existe
if ($n_entradas > 0)
{
// Pega os dados do usuário
$entry = @ldap_first_entry($m_ds, $m_sr);
$attrs = @ldap_get_attributes($m_ds, $entry);
$m_dn = @ldap_get_dn($m_ds, $entry);
// Faz login com os stributos do usuário
$r = @ldap_bind($m_ds, $m_dn, $m_PW);
// se falhar
if (empty ($r))
{
// Define a senha como errada
$m_error_msg = "Senha Invalida!";
}
// caso contrário
else
{
// esvazia a variavel de $m_error_msg
$m_error_msg = "";
// Define sucesso a variavel $m_sucess
$m_sucess = true;
}
}
// Caso nehum dado retorne, não existe nehum usuário com este login
else
{
$m_error_msg = "Usuario Invalido!";
}
// Fecha a conexão com o LDAP
@ ldap_close($m_ds);
if($m_sucess == true)
{
echo "Autenticado!!";
}
else
{
echo $m_error_msg;
}
?>
O código completo se encontra aqui.
OBS: No pacote de código que esta para download é diferente do código disponível acima. O código PHP que esta disponível para download se trata de uma classe de conexão, precisando de uma interface para o uso. Para um bom entendimento do exemplo é importante que leia os manuais do LDAP e a
documentação no PHP Brasil sobre autenticação LDAP




