Pergunta

Eu estou procurando uma maneira de usuários autenticados através de LDAP com PHP (com o Active Directory ser o provedor). Idealmente, deve ser capaz de executar no IIS 7 ( adLDAP faz isso no Apache). Qualquer pessoa tinha feito nada semelhante, com sucesso?

  • Editar:. Eu prefiro uma biblioteca / classe com o código que está pronto para ir ... Seria bobagem para inventar a roda quando alguém já o fez
Foi útil?

Solução

A importação de uma biblioteca inteira parece ineficiente quando tudo que você precisa é essencialmente duas linhas de código ...

$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
  // log them in!
} else {
  // error message
}

Outras dicas

Você poderia pensar 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á um monte de coisas que podem complicar-lo muito rápido:

  • Você deve validar a entrada. Um nome de usuário / senha vazia passaria de outra forma.
  • Você deve garantir que o nome de usuário / senha está devidamente codificado quando vinculativo.
  • Você deve criptografar a conexão usando TLS.
  • Usando servidores LDAP separadas para a redundância no caso de um é para baixo.
  • Obter uma mensagem de erro informativo se a autenticação falhar.

É realmente mais fácil na maioria dos casos para usar uma biblioteca LDAP apoiar o acima. Eu finalmente acabou rolando minha própria biblioteca que lida com todos os pontos acima: LdapTools (Bem, não apenas para autenticação , ele pode fazer muito mais). Ele pode ser usado como o seguinte:

use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;

$domain = (new DomainConfiguration('example.com'))
    ->setUsername('username') # A separate AD service account used by your app
    ->setPassword('password')
    ->setServers(['dc1', 'dc2', 'dc3'])
    ->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);

if (!$ldap->authenticate($username, $password, $message)) {
    echo "Error: $message";
} else {
    // Do something...
}

A chamada autenticar acima vontade:

  • Validar que nem o nome de usuário ou senha está vazia.
  • Verifique se o nome de usuário / senha está devidamente codificado (UTF-8 por padrão)
  • Tente um servidor LDAP alternativo no caso de um é para baixo.
  • Criptografar o pedido de autenticação usando TLS.
  • Fornecer informações adicionais, caso tenha falhado (ie. Bloqueado conta / desativado, etc)

Existem outras bibliotecas para fazer isso também (Tais como Adldap2). No entanto, senti o suficiente para fornecer algumas informações adicionais como o mais up-votado resposta é realmente um risco de segurança de contar com sem validação de entrada feito e não usando TLS.

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 pode vincular a LDAP, é válido; se não puder, não é. Se tudo que você está fazendo é autenticação (não conta de gestão), não vejo a necessidade de uma biblioteca.

Eu gosto do Zend_Ldap Classe , você só pode usar essa classe em seu projeto, sem o Zend Framework.

PHP tem bibliotecas: http://ca.php.net/ldap

PERA também tem um número de pacotes: http: // pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

Eu não usei qualquer um, mas eu estava indo para em um ponto e eles parecia que eles devem funcionar.

Para aqueles que procuram um exemplo completo confira http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .

Eu testei esta conexão com o Windows Server 2003 e Windows Server 2008 controladores de domínio R2 de um Windows Server 2003 Web Server (IIS6) e de um Windows Server 2012 a empresa a executar o IIS 8.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top