我正在使用以下配置对我的用户进行身份验证(简化)
<AuthnProviderAlias ldap server1>
AuthLDAPURL ldap://server1/whatever?uid?one?
</AuthnProviderAlias>
<AuthnProviderAlias ldap server2>
AuthLDAPURL ldap://server2/whatever?uid?one?
</AuthnProviderAlias>
<Location />
AuthName "Realm"
AuthType Basic
AuthBasicProvider server1 server2
AuthzLDAPAuthoritative off
require valid-user
</Location>
有什么方法可以知道我的用户是从哪个 LDAP 服务器进行身份验证的?当身份验证成功时,我想设置一个 HTTP 标头(类似“SourceLDAPServer: server2”),以便能够判断用户在哪个服务器上有效。Apache 2.2.x 可以做到这一点吗?
答案1
Apache 应该可以mod_headers。不过,我不知道 mod_ldap 会使用什么环境变量。如果您安装了 PHP,只需创建一个包含以下行的 PHP 文件
<?php phpinfo(); ?>
然后浏览该文件。查看该页面中打印的环境变量,并尝试找出周围是否有任何 ldap 变量。
答案2
似乎唯一的方法是从 LDAP 服务器中选择更多属性,如下所示:
<AuthnProviderAlias ldap server1>
AuthLDAPURL ldap://server1/whatever?uid,type1?one?
</AuthnProviderAlias>
<AuthnProviderAlias ldap server2>
AuthLDAPURL ldap://server2/whatever?uid,type2?one?
</AuthnProviderAlias>
当身份验证成功时,您会发现AUTHENTICATE_type1
或AUTHENTICATE_type2
作为环境变量,具体取决于执行身份验证的 LDAP 服务器。
使用 mod_headers,可以通过这种方式设置 header 值
Header set UserType type1 env=AUTHENTICATE_type1
Header set UserType type2 env=AUTHENTICATE_type2