我正在尝试设置一些WebSSO机制,允许我的客户对内部Active Directory进行身份validation,然后添加包含凭证信息的安全(https)头。
第一个版本“非常”简单。 我正在使用Apache和mod_auth_kerb来validation,然后添加标题。 以下configuration是现有的一个kinsnippet。
<VirtualHost *:80> ServerName external-sso.corp.fr RewriteEngine On </VirtualHost> <location /app2> # Authentication AuthType Kerberos AuthName "Active Directory Authentication" KrbMethodNegotiate On KrbMethodK5Passwd On KrbLocalUserMapping On KrbAuthRealms CORP.REALM.FR Krb5KeyTab /etc/krb5/http-myserver.corp.realm.fr.keytab Require valid-user # Identification AuthLDAPURL "ldaps://corp.realm.fr:636/DC=realm,DC=corp,DC=fr?sAMAccountName?sub?(objectClass=*)" AuthLDAPBindDN "CN=App2,OU=cloud,OU=prod,OU=Authentication,DC=realm,DC=corp,DC=fr" AuthLDAPBindPassword "*******" AuthLDAPGroupAttributeIsDN on Require valid-user # Adding Information into headers RewriteCond %{REMOTE_USER} (.+) RewriteRule .* - [E=RU:%{REMOTE_USER}] RequestHeader set X-App2-Remote-User %{RU}e </location>
进入下一个版本,我想添加特定的头只有当用户属于一个组,例如用户帐户名称,如果他被允许访问APP2,通用账户,如果没有。
即使有可能, 我也不知道如何做到这一点,甚至创造两个不同的虚拟主机 。
你能给我一些提示吗? 不要犹豫,添加build议,即使我知道:
需要组而不是需要用户的帮助?
另请参阅关于嵌套组枚举的这个问题 。
Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=Access to Apache,OU=My Organization Unit,DC=company,DC=com
既然你正在使用LDAP,你可以避免mod_rewrite。 虽然设置:
AuthLDAPRemoteUserAttribute sAMAccountName
对Apache-2.4没有影响 – 与文档相反 – 工作的是%{AUTHENTICATE_sAMAccountName}e 。 例如:
RequestHeader set X-App2-Remote-User %{AUTHENTICATE_sAMAccountName}e
请注意, AuthLDAPURL需要在末尾包含?sAMAccountName ,以便在mod_ldap环境中创buildAUTHENTICATE_sAMAccountName 。 你已经有了你的例子。
我终于解决了我的问题,修改了我提出问题的方式。
我设法有第一个应用程序(app1)调用的2个不同的应用程序上下文(例如/ app2-anonymous和/ app2-nameduser)。
但是我仍然在寻找更好的答案,即使看起来我的解决scheme是“Apache HTTP方式”。