A autenticação de usuárioLDAP é o processo de validação de um nome de usuário e senha com um servidor de diretório como MS Active Directory, OpenLDAP ouOpenDJ. Os diretórios LDAP são tecnologia padrão para armazenar informações de usuário, grupo e permissão e servir isso para aplicações na empresa.
A autenticação de usuários com um diretório LDAP é um processo de dois passos. Este artigo explica a mecânica do mesmo e depois como configurá-lo no LdapAuth.
Passo 1 – Resolvendo o nome de utilizador para um atributo de entrada de directório
Entradas de utilizador num directório são identificadas por um nome distinto (DN), que contém uma estrutura parecida com um caminho a partir da raiz do directório (o ambientador da direita):
uid=alice,ou=people,dc=wonderland,dc=net
Para autenticar um utilizador com um directório LDAP necessita primeiro de obter o seu DN assim como a sua palavra-passe.
Com um formulário de login, as pessoas normalmente introduzem um identificador simples como o seu nome de utilizador ou endereço de e-mail. Você não espera que elas memorizem o DN da sua entrada no directório. Isso seria impraticável.
Para resolver este problema, entra uma resolução DN. Ela pega o nome do usuário oremail, então executa uma busca contra o nome ou atributos de e-mail de todos os usuários para encontrar o DN da entrada correspondente. Os diretórios empregam uma indexação e cache altamente eficientes, então essas buscas são normalmente muito rápidas.
Os atributos de diretório a serem buscados são definidos no separador de configuração do searchFilterconfigurationparameter.A configuração padrão do LdapAuth busca os atributos UID e email. O espaço em%u é substituído pelo identificador de usuário digitado na forma de login:
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u))
Se você quiser pesquisar por UID somente o filtro de pesquisa teria esta aparência:
ldapAuth.dnResolution.searchFilter = (uid=%u)
Se você quiser procurar por UID, e-mail e número de funcionário, estenda o filtro para
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u)(employeeNumber=%u))
Duas coisas importantes a observar ao configurar o DNresolution e criar novos usuários no diretório:
-
Os atributos – nome de usuário, e-mail, etc – com os quais o login dos usuários deve ser único. Se duas entradas tiverem o mesmo atributo de identificação, por exemplo e-mail, a autenticação será prontamente negada.
-
Certifique-se de que cada utilizador que se espera que faça login tem um atributo definido para o atributo de identificação. Por exemplo, se os utilizadores vão entrar com o seu endereço de email, certifique-se que todas as contas têm um atributo de email definido. Caso contrário a autenticação falhará.
O LdapAuth web API não revela na autenticação a causa da falha de login – se foi um nome de utilizador errado, uma palavra-passe errada, ou ambos. Para resolver situações em que um usuário não é capaz de fazer logindes apesar de digitar um nome de usuário e senha corretos, verifique os logs do serviço.
Se um login foi rejeitado devido a um nome de usuário errado, uma linha como esta aparecerá no log:
2012-10-01 10:52:51,460 INFO – user.auth: username=tom authenticated=false message=Invalid username
Se o nome de usuário foi corretamente resolvido, mas a senha estava errada:
2012-10-01 10:55:05,662 INFO – user.auth: username=alice DN=uid=alice,ou=people,dc=wonderland,dc=net authenticated=false message=Invalid password
Se resolvemos corretamente a entrada de diretório do usuário DN, podemos prosseguir para o próximo passo – verificar a senha.
Step 2 – Validando a senha do usuário
Passwords são verificadas por um comando LDAP chamado bind. Uma conexão é aberta para o servidor de diretório, então um pedido é enviado para autenticar a conexão como um determinado usuário, passando sua entrada DN e senha:
DN: uid=alice,ou=people,dc=wonderland,dc=netpassword: secret
Se as credenciais estiverem corretas, o servidor de diretório retorna o sucesso. Caso contrário, retorna um erro LDAP Invalid credentials
(código 49).
Important things to note here:
-
A senha é verificada contra um atributo na entrada do usuário dedicada para servir a esse propósito. Se você estiver usando um esquema de diretório padrão, este atributo é chamado de
userPassword
. No MS Active Directory o nome deste atributo éunicodePwd
. Certifique-se de que cada usuário que é esperado que loginhas um atributo de senha definido. Caso contrário, a autenticação falhará. -
Os valores das senhas são muitas vezes em hash e podem ser adicionalmente protegidos, por exemplo, tornando-os somente para escrita. Portanto, uma simples leitura e comparação do LDAP geralmente não funciona aqui. O comando bind é sempre o método preferido.
-
As palavras-passe são tipicamente sensíveis a maiúsculas/minúsculas.
Again, lembre-se que os ficheiros de registo são seus amigos. Eles registram detalhes de tentativas de everylogin e podem ser usados para rápida resolução de problemas quando a autenticação não está funcionando como esperado. Se você precisar de mais ajuda na configuração do LdapAuthget, entre em contato conosco.