LDAP Auth прокси, добавляющий заголовки в соответствии с группами LDAP
Я пытаюсь настроить некоторые механизмы WebSSO, которые позволяют моему клиенту аутентифицировать людей по внутренней Active Directory, а затем добавлять безопасные (https) заголовки, содержащие информацию о полномочиях.
Версия 1 ОК: аутентификация и добавление заголовков
Первая версия "довольно" проста. Я использую Apache и mod_auth_kerb для аутентификации, а затем добавляю заголовки. Следующая конфигурация является родственной существующей.
<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 Directoy уже есть механизмы web-sso с AD/AM
- Добавление заголовков в действительности не защищено (независимо от того, используется ли здесь HTTPS и IP-фильтрация)
- Мне действительно нужен полноценный веб-сайт (мы на самом деле сравниваем Shibboleth, AD/AM и другие решения, но у нас нет времени ждать:) ... вы знаете, бизнес есть бизнес!
3 ответа
Поскольку вы используете LDAP, вы можете избежать mod_rewrite. Хоть настройка:
AuthLDAPRemoteUserAttribute sAMAccountName
не имел никакого эффекта для меня с Apache-2.4 - вопреки документации - что работало, было %{AUTHENTICATE_sAMAccountName}e
, Например:
RequestHeader set X-App2-Remote-User %{AUTHENTICATE_sAMAccountName}e
Обратите внимание, что AuthLDAPURL
должен содержать ?sAMAccountName
в конце для AUTHENTICATE_sAMAccountName
быть созданным в среде mod_ldap. У вас уже есть это в вашем примере.
Требуется ли группа вместо помощи пользователя?
Также посмотрите этот вопрос о перечислении вложенных групп.
Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=Access to Apache,OU=My Organization Unit,DC=company,DC=com
Я наконец решил свою проблему, изменив способ, которым я дал проблему.
Мне удалось иметь 2 разных контекста приложения (например, /app2-anonymous и /app2-nameduser), вызываемых первым приложением (app1).
Но я все еще ищу лучший ответ, даже если кажется, что мое решение - "путь Apache HTTP".