mod_authnz_ldap: Usando userPrincipalName e sAMAccountName com AuthzSVNAccessFile

mod_authnz_ldap: Usando userPrincipalName e sAMAccountName com AuthzSVNAccessFile

este é meu primeiro post aqui, então por favor seja gentil comigo...

Temos o Apache gerenciando o acesso ao nosso servidor Subversion. Atualmente, os usuários só podem fazer login com seu sAMAccountName, mas como userPrincipalName (endereço de e-mail) está gradualmente se tornando o ID principal para a maioria dos logins, gostaríamos de oferecer suporte a isso, além de manter o suporte para sAMAccountName.

A abordagem atual que se parece com a seguinte tem a desvantagem de que ambos os nomes de usuário - sAMAccountName e userPrincipalName - precisam ser especificados no svnaccessfile:

<AuthnProviderAlias ldap ldap-sAMAccountName>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?sAMAccountName?sub?(objectclass=user)"
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-userprincipalname>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?userPrincipalName?sub?(objectclass=user)"
</AuthnProviderAlias>

<Location "/our_repo">
DAV svn
SVNPath /svn/repos/our_repo
SVNListParentPath on

AuthzSVNAccessFile /etc/apache2/conf-available/authz_repository_our_repo
Options Indexes Followsymlinks

AuthBasicProvider ldap-sAMAccountName  ldap-userprincipalname

AuthType Basic
AuthName "LDAP authentication"
Require valid-user
# Note that Require ldap-* would not work here, since the
# AuthnProviderAlias does not provide the config to authorization providers
# that are implemented in the same module as the authentication provider.
</Location>

Então, estou procurando uma maneira de especificar apenas userPrincipalNames no svnaccessfile. Eu esperava que AuthLDAPRemoteUserAttribute pudesse ajudar aqui, então adicionei AuthLDAPRemoteUserAttribute userPrincipalNameldap-sAMAccountName que levou a esta mensagem em error.log:

autenticação auth_ldap: REMOTE_USER deveria ser configurado com o atributo 'userPrincipalName', mas este atributo não foi solicitado na consulta LDAP para o usuário. REMOTE_USER retornará ao nome de usuário ou DN conforme apropriado.

É este o caminho certo? Isso é possível?

Obrigado

Flo

Responder1

Inspirado porhttps://svn.haxx.se/users/archive-2010-04/0011.shtmltentamos novamente e encontramos uma solução sobre como consultar o ldap para dois campos:

<AuthnProviderAlias ldap ldap-sAMAccountName>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPRemoteUserIsDN on
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?sAMAccountName,userPrincipalName?sub?(objectclass=*)"
    AuthLDAPRemoteUserAttribute userPrincipalName
</AuthnProviderAlias>

A última linha transforma REMOTE_USER no conteúdo de userPrincipalName.

Como userPrincipalName em nossa empresa contém endereços de e-mail com algumas letras maiúsculas, temos que usar exatamente a mesma caixa de endereços de e-mail no svnaccessfile.

Para usar apenas userPrincipalName e não o que o usuário digitou (REMOTE_USER), também tivemos que especificar AuthLDAPRemoteUserAttribute para o outro AutnProviderAlias:

<AuthnProviderAlias ldap ldap-userprincipalname>
    AuthLDAPBindDN "CN=d-svn-ldap,OU=IT-050,OU=Service Accounts,OU=Accounts,OU=Domain Administration,DC=cds,DC=company"
    AuthLDAPBindPassword ***
    AuthLDAPUrl "ldap://server.company:3268/DC=cds,DC=company?userPrincipalName?sub?(objectclass=user)"
    AuthLDAPRemoteUserAttribute userPrincipalName
</AuthnProviderAlias>

Também tivemos que mudar a ordem dos fornecedores:

AuthBasicProvider ldap-userprincipalname ldap-sAMAccountName  

Avisos colaterais: error.log mostra apenas rejeições devido a resultados ldap, permissões ausentes em svnaccessfile não aparecem lá. Portanto, as alterações no svn accessfile são visíveis sem reiniciar o Apache ou excluir o login do navegador.

informação relacionada