Estou procurando uma maneira de autenticar usuários por meio de LDAP com PHP (com o Active Directory sendo o provedor). Idealmente, ele deve ser capaz de rodar no IIS 7 ( adLDAP faz isso no Apache). Alguém já havia feito algo semelhante, com sucesso?
- Edit: Eu prefiro uma biblioteca / classe com código pronto para ir ... Seria bobagem inventar a roda quando alguém já o fez.
Respostas:
Importar uma biblioteca inteira parece ineficiente quando tudo que você precisa são essencialmente duas linhas de código ...
fonte
ldap_set_option
para fazer com que ele se comporte de maneira diferente. Talvez definindo a versão do protocolo? Você terá que experimentar. Eu pessoalmente sugiro que você verifique se há uma senha vazia de qualquer maneira, apenas por segurança.ldap_bind
seria o tratamento, e os caracteres especiais não são um problema.Você pensaria que simplesmente autenticar um usuário no Active Directory seria um processo bastante simples usando LDAP em PHP sem a necessidade de uma biblioteca. Mas há muitas coisas que podem complicar muito rápido:
Na verdade, é mais fácil na maioria dos casos usar uma biblioteca LDAP que suporte o acima. No final das contas acabei lançando minha própria biblioteca que lida com todos os pontos acima: LdapTools (Bem, não apenas para autenticação, ela pode fazer muito mais). Ele pode ser usado da seguinte forma:
A chamada de autenticação acima irá:
Existem outras bibliotecas para fazer isso também (como Adldap2). No entanto, me senti compelido o suficiente para fornecer algumas informações adicionais, já que a resposta mais votada é, na verdade, um risco de segurança no qual confiar sem validação de entrada feita e sem usar TLS.
fonte
ldaps://
formato para a conexão está obsoleto. No meu exemplo, quando você especifica,setUseTls(true)
ele usa oldap://
formato e emite um StartTLS usandoldap_start_tls($connection)
. Portanto, o próprio TLS não foi descontinuado, apenas conectando usandoldaps://
(que na verdade se conecta ao LDAP por uma porta completamente diferente).Eu faço isso simplesmente passando as credenciais do usuário para ldap_bind ().
http://php.net/manual/en/function.ldap-bind.php
Se a conta puder ser vinculada ao LDAP, ela é válida; se não puder, não é. Se tudo o que você está fazendo é autenticação (não gerenciamento de conta), não vejo a necessidade de uma biblioteca.
fonte
Eu gosto da classe Zend_Ldap , você pode usar apenas esta classe em seu projeto, sem o Zend Framework.
fonte
PHP tem bibliotecas: http://ca.php.net/ldap
O PEAR também tem vários pacotes: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0
Eu não usei nenhum dos dois, mas estava indo em um ponto e eles pareciam que deveriam funcionar.
fonte
Para quem procura um exemplo completo, confira http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .
Eu testei essa conexão com os controladores de domínio do Windows Server 2003 e do Windows Server 2008 R2 a partir de um servidor Web do Windows Server 2003 (IIS6) e de uma empresa do Windows Server 2012 executando o IIS 8.
fonte