Переключение между несколькими типами аутентификации на одном URL

У меня есть защищенный SSO-сайт, который использует аутентификацию Shibboleth и провайдера идентификации SAML. Мне нужно разрешить сканеру Google Search Appliance индексировать URL-адреса. У меня есть требование изменить HTTP-запрос с SAML на обычную аутентификацию только для агента пользователя GSA без перезаписи URL. Как я могу настроить Apache или Shibboleth, чтобы справиться с этим?

В другом потоке я увидел предложение настроить разные подкаталоги для разных типов аутентификации. Как принять несколько вариантов аутентификации в Apache? К сожалению, этот подход удовлетворяет моим требованиям, потому что он изменяет URL-адреса - GSA будет индексировать дополнительный токен, добавленный к URL-адресу, и выводить его в результатах поиска вместо канонических URL-адресов.

Мой shibboleth2.xml настроен для SAML 2.0. Вот фрагмент vhost в Apache. Есть ли способ добавить условную логику для типа аутентификации на виртуальном хосте в Apache 2.2 или 2.4? Или есть способ решить эту проблему с помощью конфигурации Shib?

<VirtualHost *:443>
DocumentRoot    "/var/dispatcher/cache/www"
# Wish I could make use of this variable to toggle AuthTypes
SetEnvIfNoCase User-Agent ^gsa-crawler is_gsa_crawler

<Location />
    # for end users
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    ShibUseHeaders On
    Require valid-user
</Location>

<Location />
    # for gsa
    AuthType Basic
    AuthName "Secure"
    AuthBasicProvider file
    AuthUserFile path_to/basic_pw_file
    Require valid-user
</Location>

<Directory "/var/dispatcher/cache/www">
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

2 ответа

Я только что спросил что-то подобное и нашел возможное решение, которое также может иметь отношение к этой записи:

Объединяйте провайдеров аутентификации Apache разных типов с базовой аутентификацией, только если они предварительно предоставлены клиентом

Вы в основном используете <If></If><Else></Else> проверка обернута вокруг двух наборов директив авторизации.

Я не уверен, что вы могли бы сделать это с mod_access - насколько я знаю, он не поддерживает выборочный выбор механизмов аутентификации, он только позволяет получить список механизмов, через которые он может провалиться, пока он не провалит их все или один не преуспеет. И проблема в том, что вы не можете "попробовать SAML" без перенаправления пользователя с сайта.

Если бы вы делали это на языке программирования с пассивной аутентификацией, я думаю, это было бы тривиально (если бы операторы и перенаправления). Но с использованием "Требуется действительный пользователь" и другие mod_access вещи не приведут тебя туда, куда, я думаю, ты пытаешься пойти.

Мой ответ в основном относится к Apache < 2.4.x, так как я не уверен на 100%, что в 2.4 отсутствует ваш набор функций (они сильно изменились).