这是我在这里的第一篇帖子,所以请善待我......
我们的 subversion 服务器由 apache 管理访问。目前用户只能使用 sAMAccountName 登录,但由于 userPrincipalName(电子邮件地址)正逐渐成为大多数登录的主要 ID,我们希望支持该 ID 并继续支持 sAMAccountName。
当前方法如下所示,其缺点是必须在 svnaccessfile 中指定两个用户名 - sAMAccountName 和 userPrincipalName:
<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。
这是正确的方法吗?这有可能吗?
谢谢
弗洛
答案1
灵感来自https://svn.haxx.se/users/archive-2010-04/0011.shtml我们再次尝试并找到了如何查询 ldap 两个字段的解决方案:
<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>
最后一行将REMOTE_USER变成了userPrincipalName的内容。
由于我们公司的 userPrincipalName 包含带有一些大写字母的电子邮件地址,因此我们必须在 svnaccessfile 中使用完全相同的电子邮件地址大小写。
为了仅使用 userPrincipalName 而不使用用户输入的内容(REMOTE_USER),我们还必须为其他 AutnProviderAlias 指定 AuthLDAPRemoteUserAttribute:
<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>
我们还必须改变提供商的顺序:
AuthBasicProvider ldap-userprincipalname ldap-sAMAccountName
附注:error.log 仅显示由于 ldap 结果而导致的拒绝,svnaccessfile 中缺少的权限不会显示在那里。因此,无需重新启动 apache 或删除浏览器登录即可看到 svn accessfile 中的更改。