Объединяйте провайдеров аутентификации Apache разных типов с базовой аутентификацией, только если они предварительно предоставлены клиентом
Я хотел бы иметь возможность иметь путь на сервере Apache (2.4.18+ на ub16), который в основном аутентифицируется с использованием SAML (с помощью плагина mod_auth_mellon) для интерактивного использования, но также поддерживает возможность вызывающей стороны отправлять упреждающую базовую аутентификацию полномочия. (Подумайте о конечной точке API REST, которая обычно запускает вход в интерактивную форму, но разрешает обход, если вы предварительно отправляете базовые учетные данные аутентификации.)
По сути, я ищу это поведение:
- Если кредиты отправляются с запросом:
- Попробуйте их, и если они работают, разрешите запрос
- Если вышеуказанные кредиты не сработали или не были предоставлены
- Запустите предпочтительный плагин аутентификации.
Это возможно? Я бы предпочел НЕ вставлять это обратно в само приложение.
Чего я не хочу, так это чтобы сервер apache отправлял ответ, запускающий диалог базовой аутентификации.
1 ответ
Отвечая на мой собственный вопрос.... еще раз покопался в этом и придумал следующее, что, похоже, работает:
<Location />
<If "-n req('Authorization')">
AuthName "Active Directory"
AuthBasicProvider ldap
AuthType basic
AuthLDAPMaxSubGroupDepth 0
AuthLDAPBindAuthoritative off
AuthLDAPRemoteUserAttribute sAMAccountName
AuthLDAPInitialBindPattern (.+) $1@yyyyy
AuthLDAPInitialBindAsUser on
AuthLDAPSearchAsUser on
AuthLDAPCompareAsUser on
AuthLDAPUrl "ldaps://xxx,dc=com?sAMAccountName,memberOf?sub"
LDAPReferrals Off
require valid-user
</If>
<Else>
Require valid-user
AuthType "Mellon"
MellonEnable "auth"
MellonVariable "cookie"
MellonEndpointPath "/sso"
MellonDefaultLoginPath "/"
MellonSubjectConfirmationDataAddressCheck Off
MellonSessionLength 86400
MellonSPPrivateKeyFile /...../sp-private-key.pem
MellonIdPMetadataFile /...../idp-metadata.xml
MellonDoNotVerifyLogoutSignature https://........
</Else>
</Location>
Кто-нибудь видит что-то не так с этим подходом?