我正在尝试设置一些 WebSSO 机制,允许我的客户根据内部 Active Directory 对人员进行身份验证,然后添加包含凭据信息的安全(https)标头。
版本 1 OK:验证并添加标题
第一个版本“相当”简单。我使用 Apache 和 mod_auth_kerb 进行身份验证,然后添加标头。以下配置是现有配置的 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>
版本 2 不知道!:根据组进行身份验证并添加标题
在下一个版本中,我想仅当用户属于某个组时才添加特定的标题,例如,如果允许访问 APP2,则添加用户帐户名,如果不允许,则添加通用帐户。
我不知道如何实现这一点,甚至创建了两个不同的虚拟主机......,即使有可能。
您能给我一些提示吗?请随时提供建议,即使我知道:
- Active Directoryoy 已经具有带有 AD/AM 的 web-sso 机制
- 添加标头实际上并不安全(无论在这里,使用 HTTPS 和 IP 过滤)
- 我确实需要一个完整的 web-sso(我们实际上正在比较 Shibboleth、AD/AM 和其他解决方案,但没有时间等待:)...你知道,生意就是生意!
答案1
答案2
由于您使用的是 LDAP,因此可以避免使用 mod_rewrite。虽然设置:
AuthLDAPRemoteUserAttribute sAMAccountName
对我来说,Apache-2.4 没有影响——与文档—— 真正起作用的是%{AUTHENTICATE_sAMAccountName}e
。例如:
RequestHeader set X-App2-Remote-User %{AUTHENTICATE_sAMAccountName}e
请注意,需要在末尾AuthLDAPURL
包含由 mod_ldap 在环境中创建的。您的示例中已经有了它。?sAMAccountName
AUTHENTICATE_sAMAccountName
答案3
我最终通过修改提出问题的方式解决了我的问题。
我设法让第一个应用程序(app1)调用两个不同的应用程序上下文(例如/app2-anonymous 和/app2-nameduser)。
但我仍在寻找更好的答案,即使我的解决方案似乎是“Apache HTTP 方式”。