这是我在这里的第一篇文章,所以请善待我......
我们有 apache 管理我们的颠覆服务器的访问权限。目前用户只能使用他们的 sAMAccountName 登录,但由于 userPrincipalName(电子邮件地址)逐渐成为大多数登录的主要 ID,我们希望支持它并继续支持 sAMAccountName。
当前的方法如下所示,缺点是两个用户名 - sAMAccountName 和 userPrincipalName - 都必须在 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>
所以我正在寻找一种只能在 svnaccessfile 中指定 userPrincipalNames 的方法。我希望 AuthLDAPRemoteUserAttribute 在这里可能会有所帮助,所以我添加
AuthLDAPRemoteUserAttribute userPrincipalName
到 ldap-sAMAccountName 中,这会导致 error.log 中出现此消息:
auth_ldap 身份验证:REMOTE_USER 将使用属性“userPrincipalName”设置,但在用户的 LDAP 查询中未请求此属性。REMOTE_USER 将酌情回退到用户名或 DN。
这是正确的方法吗?这甚至可能吗?
谢谢
弗洛
受https://svn.haxx.se/users/archive-2010-04/0011.shtml的启发,我们再次尝试并找到了如何查询 ldap 两个字段的解决方案:
最后一行将 REMOTE_USER 转换为 userPrincipalName 的内容。
由于我们公司的 userPrincipalName 包含带有一些大写字母的电子邮件地址,因此我们必须在 svnaccess 文件中使用完全相同的电子邮件地址大小写。
为了只使用 userPrincipalName 而不是用户输入的内容 (REMOTE_USER),我们还必须为其他 AutnProviderAlias 指定 AuthLDAPRemoteUserAttribute:
我们还必须更改提供者的顺序:
旁注:error.log 仅显示由于 ldap 结果而被拒绝,svnaccessfile 中缺少的权限不会显示在那里。因此 svn accessfile 中的更改是可见的,无需重新启动 apache 或删除浏览器登录。