Autenticação LDAP Aberta - Como verificar userPassword sem bind?

2

O que estou fazendo ...

Tentando implementar o login único para todas as nossas máquinas, blogs, wiki, CRM, HRM, ferramentas de gerenciamento de projetos, SVN, etc, etc.

Temos o OpenLDAP instalado e configurado em nosso servidor dedicado que executa o CentOS. Eu usei o phpLdapAdmin para adicionar estrutura organizacional e informações sobre vários usuários, clientes, recursos.

Um exemplo de entrada para um usuário ...

DN is :: cn=Bill Gates, ou=users, dc=example, dc=com

userid :: bill.gates

mail :: [email protected]

userpassword :: as2%$%66789ds (some md5 cryptic value)

Onde estou agora ...

O OpenLDdap está funcionando bem. O teste de ligação também foi executado com sucesso.

O que eu quero fazer ...

Vincule usando um usuário de privilégio mais alto e, em seguida, pesquise os usuários pelo ID do usuário ou pelo email, que são um pouco diferentes do CN. O ponto é que eu quero autenticar o usuário em um atributo que não faz parte do RDN.

Onde estou preso ...

  1. Não consigo ligar usando o userid como se não fosse um DN. Isso é permitido em geral?
  2. Eu posso ligar usando um usuário LDAP diferente, digamos, um usuário com privilégios altos e ldap_search para obter um registro exclusivo com base no filtro userId, mas o md5 da senha digitada pelo usuário não corresponde ao campo userPassword. O OpenDLdap criptografa usando algum sal. Eu não quero remover o sal também. Existe alguma saída?

Minhas perguntas (finalmente)

  1. Podemos fazer o ldap_bind em um atributo que não faz parte do RDN?
  2. Podemos enviar uma senha não criptografada (usaremos o túnel HTTPS para segurança) para o servidor OpenLDAP e solicitar que o OpenLDAP criptografe is e verifique se o nome do usuário está arquivado? Isso normalmente é feito em todos os aplicativos da web, certo?
  3. (off-topic) O ID do usuário pode conter. (pontos) e espaços. Precisamos de um char entre “First Name (givenName)” e “Last Name (sn)”. Qual deles é um personagem seguro? Quero dizer, qual caractere não-numérico é permitido em nomes de usuários por todos (ou mais) aplicativos do mundo?

A minha maior preocupação é optar por uma abordagem, que pode ser facilmente utilizada para trabalhar com a maioria das aplicações. Existem muitos aplicativos baseados na Web, softwares de desktop, etc, que serão modificados durante o login único da missão!

Obrigado pela leitura ... e obrigado antecipadamente por alguma ajuda!

-Rahul

    
por rahul286 21.08.2009 / 07:07

2 respostas

5

Sobre a primeira pergunta:

Eu trabalhei com outro sistema LDAP que permitia 'login' contra vários atributos do usuário. A solução foi fazer duas conexões. A primeira conexão, provavelmente vinculada anonimamente, consulta o LDAP com as informações fornecidas pelo usuário para localizar o RDN de seu objeto de usuário. A segunda conexão tenta uma ligação com senha com o RDN descoberto e a senha fornecida. É um processo de dois passos e funciona.

No entanto, se esse aplicativo tiver muitos logons com atributos fornecidos que não sejam o próprio RDN, será uma boa ideia indexar esses atributos. É uma coisa de performance.

Dois:

O OpenLDAP suporta LDAP-SSL tanto quanto me lembro (TCP / 636), que pode ser uma rota melhor que um túnel HTTPS. Por padrão, os vínculos LDAP estão limpos, mas existem extensões LDAP que permitem métodos adicionais. O Active Directory permite vinculações com o NTLM LDAP, por exemplo, e tenho certeza de que o LDAP também foi kerberizado em algum momento. Não sei quais métodos o openLDAP suporta.

Três:

Eu tenho fontes LDAP que possuem e-mails do formato "[email protected]" em atributos. Onde fica mais arriscado é com os atributos de nomeação, e é aí que minha experiência de openLDAP cai. Eu não sei o que ele suporta para isso. Eu sei que o Active Directory permite espaços nos atributos de nomenclatura, e o Novell eDirectory permite espaços e períodos (embora não seja recomendado fazer isso). Normalmente, o atributo de nomeação é userID e os atributos como givenName, surname, emailAddress, contêm os caracteres especiais. Como eles não estão nomeando atributos, eles não têm as mesmas restrições.

    
por 21.08.2009 / 07:35
0

Eu tenho medo de não conhecer o OpenLDAP o suficiente para ajudá-lo especificamente, mas gostaria de saber se ele tem um recurso análogo ao do OpenDS. recurso de mapeamento de identidade que você pode usar.

A ideia é que um cliente possa se identificar com uma identidade personalizada e, em seguida, o mapeamento usa uma expressão regular para corresponder isso a qualquer outro atributo na entrada do usuário. No OpenDS, isso parece usar as opções SASL e, assim, usando suas ferramentas, posso fornecer opções como:

bin/ldapsearch --saslOption authid=u:dominic --saslOption mech=PLAIN [..]

O ID de autenticação é então usado pelo mapeador de identidade, que, nesse caso, corresponde ao atributo uid na minha entrada de usuário.

Espero que ajude!

    
por 21.08.2009 / 11:21