Mais filtros de pesquisa em AuthLDAPURL

5

É possível ter mais de um filtro de pesquisa no AuthLDAPURL?

Exemplo de filtro uid:

<Location /test/>
        AuthType Basic
        AuthName "Test"
        AuthBasicProvider ldap
        AuthUserFile /dev/null
        AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
        AuthLDAPBindDN "******"
        AuthLDAPBindPassword ******
        require ldap-group cn=group01,o=test,c=com
</Location>

Precisamos procurar por uid ou email. Como ...

AuthLDAPURL ldap://example.test.com/o=test,c=com?uid|mail

Solução (funciona para mim):

Testado com o Apache 2.4 link

<AuthnProviderAlias ldap ldap-uid>
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
    AuthLDAPURL "ldap://example.test.com/o=test,c=com?uid??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>

<AuthnProviderAlias ldap ldap-mail>
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
    AuthLDAPURL "ldap://example.test.com/o=test,c=com?mail??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>


<Location "/test/">
    Order deny,allow
    Allow from all

    AuthType Basic
    AuthName "Login with mail or uid"
    AuthBasicProvider ldap-uid ldap-mail
    LDAPReferrals Off
    Require valid-user
</Location>

Thx Tonin!

    
por user1373150 07.06.2013 / 13:59

1 resposta

5

Suponho que você queira procurar o atributo uid ou mail (não filtrar esses itens). Não é possível, imediatamente, usar dois atributos diferentes no URL do LDAP, embora RFC 2255 permita isso.

mod_authnz_ldap sozinho: não é possível

A documentação do mod_authnz_ldap afirma que o URL deve ser como: ldap://host:port/basedn?attribute?scope?filter com

  • attribute : o atributo a ser pesquisado. Embora a RFC 2255 permita uma lista de atributos separados por vírgula, somente o primeiro atributo será usado, não importa quão muitos são fornecidos . Se nenhum atributo for fornecido, o padrão é usar o uid. É uma boa ideia escolher um atributo que será único em todas as entradas da subárvore que você usará.
  • filter : um filtro de pesquisa LDAP válido. Se não for fornecido, o padrão é (objectClass = *), que procurará todos os objetos na árvore. Os filtros são limitados a aproximadamente 8000 caracteres (a definição de MAX_STRING_LEN no código-fonte do Apache). Isso deve ser mais que suficiente para qualquer aplicativo.

Usando 2 provedores com mod_authn_alias

No entanto, adicionando outro módulo do apache, ou seja, mod_authn_alias , você pode usar 2 LDAPURL diferentes como provedores de autenticação diferentes. Para que isso funcione, você pode adicionar um novo arquivo (que incluirá na raiz da sua configuração do Apache) contendo:

# Different LDAP attributes to be used as login
<AuthnProviderAlias ldap ldap-uid>
    AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-mail>
    AuthLDAPURL ldap://example.test.com/o=test,c=com?mail
    AuthLDAPBindDN "******"
    AuthLDAPBindPassword ******
</AuthnProviderAlias>

Em seguida, na sua declaração <Location> , você usa a seguinte configuração:

<Location /test/>
    AuthType Basic
    AuthName "Test"
    AuthBasicProvider ldap-uid ldap-mail
    AuthUserFile /dev/null
    require ldap-group cn=group01,o=test,c=com
</Location>

Isso primeiro tentará autenticar usando o uid e, se falhar, tente usar o atributo mail . Com esse tipo de configuração, você pode adicionar quantos provedores LDAPURL diferentes desejar.

Você tem que ter cuidado com uma coisa, porém, a pesquisa LDAP deve retornar um único valor , caso contrário, você não terá certeza de qual das várias entradas será usada para verificar a senha. Para isso, você pode usar um escopo ( one em vez de sub ) ou um filtro de pesquisa que limitará o número de entradas retornadas.

O arquivo adicional deve ser adicionado à sua configuração do Apache fora das diretivas <Location> ou <VirtualHost> . Ele deve ser incluído no nível raiz da sua configuração do Apache. E o módulo authn_alias precisa ser ativado, é claro.

    
por 07.06.2013 / 16:20