Как принять несколько вариантов аутентификации в Apache?
Я хочу защитить путь в моем VirtualHost, но разрешить пользователям различные варианты аутентификации (например, mod-auth-cas
, mod-auth-openid
а также mod-auth-digest
.) Как настроить определение виртуального хоста, чтобы разрешить несколько auth-type
для того же места?
4 ответа
Проблема с несколькими типами аутентификации состоит в том, что они имеют несовместимые протоколы. Вы можете попробовать метод, показанный в документации Shibboleth, где вы помещаете все в подкаталог, создаете символическую ссылку на этот каталог для каждого типа аутентификации, который вы хотите поддерживать, а затем настраиваете каждое местоположение символической ссылки для другого типа аутентификации.
<Location /basic>
AuthType Basic
AuthUserFile /path/to/.htpasswd
require valid-user
</Location>
<Location /cas>
AuthType CAS
require valid-user
</Location>
<Location /openid>
AuthOpenIDEnabled On
require valid-user
</Location>
У меня была почти такая же ситуация, решенная следующим образом:
на уровне конфигурации сервера, в apache2.conf (предполагается, что дистрибутивы на основе Debian)
<AuthnProviderAlias method1 auth1_name >
# config options
# ...
</AuthnProviderAlias>
<AuthnProviderAlias method2 auth2_name >
# config options
# ...
</AuthnProviderAlias>
в конкретном файле конфигурации виртуального хоста:
<VirtualHost *>
# config options
# ...
<Location /your_location>
# config options
AuthBasicProvider auth1_name auth2_name
# other needed config options
# ...
</Location>
</VirtualHost>
таким образом, вы можете использовать разные методы авторизации / аутентификации с разными именами в одной директиве Location для разных Virtual Host s
более подробная информация о моем решении в коротком сообщении в блоге: текст ссылки
HTH, чао:) Джанлука
Другое решение — дифференцировать аутентификацию на основе содержимого заголовка HTTP с помощью предложения:
<If "%{HTTP:Authorization} =~ /^Basic/">
AuthType Basic
AuthUserFile /path/to/.htpasswd
Require valid-user
</If>
<Elseif "%{HTTP:Authorization} =~ /^Bearer/">
AuthOpenIDEnabled On
Require valid-user
</Elseif>
<Else>
AuthType CAS
Require valid-user
</Else>