Я пытаюсь настроить некоторые механизмы WebSSO, которые позволяют моему клиенту аутентифицировать людей во внутренней Active Directory, а затем добавлять безопасные (https) заголовки, содержащие информацию об учетных данных.
Первая версия «довольно» проста. Я использую 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>
В следующей версии я хотел бы добавить определенные заголовки, ТОЛЬКО если пользователь принадлежит к группе, например имя учетной записи пользователя, если ему разрешен доступ к APP2, в противном случае - общая учетная запись.
Я не знаю, как этого добиться, даже создав два разных хоста ..., даже если это возможно.
Не могли бы вы мне подсказать? Не стесняйтесь добавлять советы, даже я знаю, что:
Поскольку вы используете 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".