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