Объединяйте провайдеров аутентификации 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>

Кто-нибудь видит что-то не так с этим подходом?

Другие вопросы по тегам