| Пункт 109. Модуль Apache mod_authnz_fcgi Этот модуль позволяет приложениям-авторизаторам FastCGI аутентифицировать пользователей и разрешать доступ к ресурсам. Он поддерживает общие авторизаторы FastCGI, которые участвуют в одной фазе аутентификации и авторизации, а также специфичные для Apache httpd аутентификаторы и авторизаторы, которые участвуют в одной или обеих фазах.
Авторизаторы FastCGI могут аутентифицироваться с использованием идентификатора пользователя и пароля, например, для обычной аутентификации, или могут аутентифицироваться с использованием произвольных механизмов.
Режимы вызова
Режимы вызова авторизаторов FastCGI, поддерживаемые этим модулем, различаются двумя характеристиками: типом и механизмом аутентификации .
Тип просто authn для аутентификации,
authz для авторизации или authnz для комбинированной аутентификации и авторизации.
Механизм аутентификации относится к механизмам конфигурации Apache httpd и этапам обработки и может быть
AuthBasicProvider , Require , или
check_user_id . Первые две из них соответствуют директивам, используемым для включения участия в соответствующей фазе обработки.
Описание каждого режима:
- Тип
authn , механизм
AuthBasicProvider
- В этом режиме
FCGI_ROLE установлено значение AUTHORIZER и
FCGI_APACHE_ROLE установлено значение AUTHENTICATOR . Приложение должно быть определено как аутентификация типа провайдера
с использованием
AuthnzFcgiDefineProvider и включено с помощью
AuthBasicProvider . Ожидается, что при вызове приложение будет аутентифицировать клиента, используя предоставленный идентификатор пользователя и пароль. Пример приложения:
#!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
умереть, если !$ENV{'REMOTE_PASSWD'};
умереть, если !$ENV{'REMOTE_USER'};
print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
$ENV{'REMOTE_PASSWD'} эквивалент "бар" ) {
print "Статус: 200\n";
print "Переменная-AUTHN_1: authn_01\n";
print "Переменная-AUTHN_2: authn_02\n";
напечатать "\n";
}
еще {
print "Статус: 401\n\n";
}
}
Пример конфигурации:
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
<Расположение "/защищено/">
Основной тип авторизации
Имя авторизации "Ограничено"
AuthBasicProvider FooAuthn
Требовать ...
</местоположение>
- Тип
authz , механизм
Require
- В этом режиме
FCGI_ROLE установлено значение
AUTHORIZER и FCGI_APACHE_ROLE установлено значение
AUTHORIZER . Приложение должно быть определено как authz типа провайдера с использованием
AuthnzFcgiDefineProvider . Ожидается, что при вызове приложение авторизует клиента, используя предоставленный идентификатор пользователя и другие данные запроса. Пример приложения:
#!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHORIZER";
умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
умереть, если $ENV{'REMOTE_PASSWD'};
print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
если ($ENV{'REMOTE_USER'} eq "foo1") {
print "Статус: 200\n";
print "Переменная-AUTHZ_1: authz_01\n";
print "Переменная-AUTHZ_2: authz_02\n";
напечатать "\n";
}
еще {
print "Статус: 403\n\n";
}
}
Пример конфигурации:
AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10103/
<Расположение "/защищено/">
Тип авторизации...
Авторизация...
AuthBasicProvider...
Требовать FooAuthz
</местоположение>
- Тип
authnz , механизм
AuthBasicProvider + Require
- В этом режиме, который поддерживает независимый от веб-сервера
AUTHORIZER протокол FastCGI, FCGI_ROLE устанавливается
AUTHORIZER и FCGI_APACHE_ROLE не устанавливается. Приложение должно быть определено как authnz типа провайдера
с использованием
AuthnzFcgiDefineProvider . Ожидается, что приложение будет обрабатывать как аутентификацию, так и авторизацию в одном и том же вызове, используя идентификатор пользователя, пароль и другие данные запроса. Вызов происходит на этапе аутентификации Apache httpd API. Если приложение возвращает 200 и тот же провайдер вызывается на этапе авторизации (через Require ), mod_authnz_fcgi вернет успех на этапе авторизации без вызова приложения. Пример приложения:
#!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
умереть, если $ENV{'FCGI_APACHE_ROLE'};
умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
умереть, если !$ENV{'REMOTE_PASSWD'};
умереть, если !$ENV{'REMOTE_USER'};
print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
$ENV{'REMOTE_PASSWD'} эквивалент "bar" &&
$ENV{'REQUEST_URI'} =~ м%/бар/.*%) {
print "Статус: 200\n";
print "Переменная-AUTHNZ_1: authnz_01\n";
print "Переменная-AUTHNZ_2: authnz_02\n";
напечатать "\n";
}
еще {
print "Статус: 401\n\n";
}
}
Пример конфигурации:
AuthnzFcgiDefineProvider аутентификация FooAuthnz fcgi://localhost:10103/
<Расположение "/защищено/">
Основной тип авторизации
Имя авторизации "Ограничено"
AuthBasicProvider FooAuthnz
Требовать FooAuthnz
</местоположение>
- Тип
authn , механизм
check_user_id
- В этом режиме
FCGI_ROLE установлено значение
AUTHORIZER и FCGI_APACHE_ROLE установлено значение
AUTHENTICATOR . Приложение должно быть определено как авторизация типа провайдера с использованием
AuthnzFcgiDefineProvider . AuthnzFcgiCheckAuthnProvider
указывает, когда он вызывается. Пример приложения:
#!/USR/бен/перл
использовать FCGI;
мой $request = FCGI::Request();
в то время как ($запрос->Принять() >= 0) {
умереть, если $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
умереть, если $ENV{'FCGI_ROLE'} ne "AUTHORIZER";
# Этот авторизатор предполагает, что параметр RequireBasicAuth для
# AuthnzFcgiCheckAuthnProvider включен:
умереть, если !$ENV{'REMOTE_PASSWD'};
умереть, если !$ENV{'REMOTE_USER'};
print STDERR "Этот текст записывается в журнал ошибок веб-сервера.\n";
if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
$ENV{'REMOTE_PASSWD'} эквивалент "бар" ) {
print "Статус: 200\n";
print "Переменная-AUTHNZ_1: authnz_01\n";
print "Переменная-AUTHNZ_2: authnz_02\n";
напечатать "\n";
}
еще {
print "Статус: 401\n\n";
# Если здесь написано тело ответа, оно будет возвращено
# клиент.
}
}
Пример конфигурации:
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10103/
<Расположение "/защищено/">
Тип авторизации...
Авторизация...
AuthnzFcgiCheckAuthnProvider FooAuthn \
Полномочный Вкл \
RequireBasicAuth выключен \
UserExpr "%{reqenv:REMOTE_USER}"
Требовать ...
</местоположение>
Дополнительные примеры
- Если ваше приложение поддерживает отдельные роли аутентификации и авторизации (
AUTHENTICATOR и AUTHORIZER ), определите отдельных поставщиков следующим образом, даже если они сопоставляются с одним и тем же приложением:
AuthnzFcgiDefineProvider authn FooAuthn fcgi://localhost:10102/
AuthnzFcgiDefineProvider authz FooAuthz fcgi://localhost:10102/
Укажите провайдера аутентификации
AuthBasicProvider
и провайдера аутентификации
Require :
Основной тип авторизации
Имя авторизации "Ограничено"
AuthBasicProvider FooAuthn
Требовать FooAuthz
- Если ваше приложение поддерживает общую
AUTHORIZER роль (аутентификация и авторизация в одном вызове), определите одного поставщика следующим образом:
AuthnzFcgiDefineProvider аутентификация FooAuthnz fcgi://localhost:10103/
Укажите провайдера аутентификации на обоих AuthBasicProvider
и Require :
Основной тип авторизации
Имя авторизации "Ограничено"
AuthBasicProvider FooAuthnz
Требовать FooAuthnz
Ограничения
Ниже приведены потенциальные функции, которые в настоящее время не реализованы:
- Средство проверки доступа Apache httpd
- Этап проверки доступа к Apache httpd API — это отдельный этап от аутентификации и авторизации. Некоторые другие реализации FastCGI реализуют эту фазу, которая обозначается настройкой
FCGI_APACHE_ROLE to ACCESS_CHECKER .
- Локальные (Unix) сокеты или каналы
- В настоящее время поддерживаются только сокеты TCP.
- Поддержка mod_authn_socache
- Взаимодействие mod_authn_socache должно быть реализовано для приложений, которые участвуют в аутентификации в стиле Apache httpd.
- Поддержка дайджест-аутентификации с использованием AuthDigestProvider.
- Ожидается, что это будет постоянное ограничение, поскольку нет потока авторизации для получения хэша.
- Управление процессом подачи заявки
- Ожидается, что это навсегда выйдет за рамки этого модуля. Процессы приложений должны контролироваться другими средствами. Например,
fcgistarter может использоваться для их запуска.
- AP_AUTH_INTERNAL_PER_URI
- Все поставщики в настоящее время зарегистрированы как AP_AUTH_INTERNAL_PER_CONF, что означает, что проверки не выполняются повторно для внутренних подзапросов с той же конфигурацией управления доступом, что и первоначальный запрос.
- Преобразование кодировки данных протокола
- Если mod_authnz_fcgi работает в среде компиляции EBCDIC, все данные протокола FastCGI записываются в EBCDIC и ожидается, что они будут получены в EBCDIC.
- Несколько запросов на одно соединение
- В настоящее время соединение с авторизатором FastCGI закрывается после каждого этапа обработки. Например, если авторизатор обрабатывает отдельные фазы аутентификации и авторизации
, тогда будут использоваться два соединения.
- Сопоставление URI
- URI от клиентов не могут быть сопоставлены, например, при
ProxyPass использовании с ответчиками FastCGI.
Ведение журнала
- Ошибки обработки регистрируются на уровне журнала
error
и выше.
- Сообщения, написанные приложением, регистрируются на уровне журнала
warn .
- Общие сообщения для отладки записываются на уровне журнала
debug .
- Переменные среды, передаваемые приложению, регистрируются на уровне журнала
trace2 . Значение переменной
REMOTE_PASSWD будет скрыто, но любые другие конфиденциальные данные будут видны в журнале .
- Все операции ввода-вывода между модулем и приложением FastCGI, включая все переменные среды, будут регистрироваться в печатном и шестнадцатеричном формате на уровне журнала
trace5 . Все конфиденциальные данные будут видны в журнале.
LogLevel может использоваться для настройки уровня журнала, характерного для mod_authnz_fcgi. Например:
Информация об уровне журнала authnz_fcgi:trace8
Директива AuthnzFcgiCheckAuthnProvider
Описание: | Позволяет приложению FastCGI обрабатывать хук аутентификации check_authn. |
Синтаксис: | AuthnzFcgiCheckAuthnProvider provider-name| None
option ... |
По умолчанию: | none |
Контекст: | каталог |
Положение дел: | Расширение |
Модуль: | mod_authnz_fcgi |
Эта директива используется, чтобы разрешить авторизатору FastCGI обрабатывать конкретную фазу обработки аутентификации или авторизации.
Некоторые возможности авторизаторов FastCGI требуют включения с помощью этой директивы вместо
AuthBasicProvider :
- небазовая аутентификация; как правило, определение идентификатора пользователя клиента и возврат его от авторизатора; см.
UserExpr вариант ниже
- Выбор пользовательского кода ответа; для ответа не 200 от авторизатора код от авторизатора будет статусом ответа
- Установка тела ответа, отличного от 200; если авторизатор предоставляет тело ответа с ответом, отличным от 200, это тело будет возвращено клиенту; поддерживается до 8192 байт текста
- имя провайдера
- Это имя поставщика, определенного с помощью
AuthnzFcgiDefineProvider .
-
None
- Укажите
None , чтобы отключить поставщика, включенного с помощью этой директивы, во внешней области, например в родительском каталоге.
- вариант
- Поддерживаются следующие параметры:
- Полномочный Вкл.|Выкл. (по умолчанию Вкл.)
- Это определяет, разрешено ли запускать другие модули, когда для этого модуля настроен авторизатор FastCGI, и он не выполняет запрос.
- ID пользователя по умолчанию
- Когда авторизатор возвращает успех,
UserExpr
настроен и оценивается как пустая строка (например, авторизатор не вернул переменную), это значение будет использоваться в качестве идентификатора пользователя. Обычно это используется, когда у авторизатора есть концепция гостевых или неаутентифицированных пользователей, а гостевые пользователи сопоставляются с определенным идентификатором пользователя для ведения журнала и других целей.
- RequireBasicAuth On|Off (по умолчанию Off)
- Это определяет, требуется ли базовая аутентификация перед передачей запроса авторизатору. При необходимости авторизатор не будет вызываться без идентификатора пользователя и пароля; 401 будет возвращен для запроса без этого.
- UserExpr expr (нет по умолчанию)
- Когда обычная проверка подлинности не предоставляется клиентом, а авторизатор определяет пользователя, это выражение, оцениваемое после вызова авторизатора, определяет пользователя. Выражение соответствует синтаксису ap_expr и должно разрешаться в строку. Типичное использование — ссылка на
параметр, возвращенный авторизатором, с использованием параметра, такого как
. Если эта опция указана и идентификатор пользователя не может быть получен с помощью выражения после успешной аутентификации, запрос будет отклонен с ошибкой 500.
Variable-XXX UserExpr "%{reqenv:XXX}"
Директива AuthnzFcgiDefineProvider
Описание: | Определяет приложение FastCGI в качестве поставщика для аутентификации и/или авторизации. |
Синтаксис: | AuthnzFcgiDefineProvider type provider-name
backend-address |
По умолчанию: | none |
Контекст: | конфигурация сервера |
Положение дел: | Расширение |
Модуль: | mod_authnz_fcgi |
Эта директива используется для определения приложения FastCGI в качестве поставщика для определенного этапа аутентификации или авторизации.
- тип
- Это должно быть установлено на authn для аутентификации,
authz для авторизации или authnz для универсального авторизатора FastCGI, который выполняет обе проверки.
- имя провайдера
- Это используется для присвоения имени провайдеру, которое используется в других директивах, таких как
AuthBasicProvider
и
Require .
- внутренний адрес
- Это указывает адрес приложения в форме
fcgi://hostname:port/ . Процесс(ы) приложения должен управляться независимо, например, с помощью
fcgistarter .
|
|