Этот модуль позволяет Nginx работать с Shibboleth, посредством авторизатора Shibbaleth's Fastcgi. Этот модуль требует конкретной конфигурации для правильной работы, а также приложения авторизации Shibbaleth's FastCGI, доступное в системе. Он направлен на то, чтобы быть похожими на части Apache Mod_Shib, хотя настройки авторизации и аутентификации Shibbaleth настроены через Shibboleth2.xml, а не в конфигурации веб -сервера.
С помощью этого модуля, настроенного против блока location , входящие запросы авторизованы в NGINX на основе результата подписания авторизатора Shibbaleth's FastCGI. В этом процессе этот модуль может использоваться для копирования атрибутов пользователя из успешного ответа авторизатора в исходный запрос Nginx в качестве заголовков или параметров среды для использования любым бэкэнд -приложением. Если авторизация не является успешной, статус ответа авторизатора и заголовки возвращаются клиенту, отрицая доступ к доступу или перенаправление браузера пользователя соответственно (например, на страницу Wayf, если это настройка).
Этот модуль работает на фазе доступа и, следовательно, может быть объединен с другими модулями доступа (например, access , auth_basic ) с помощью satisfy директивы. Этот модуль также может быть составлен вместе с ngx_http_auth_request_module , хотя использование обоих этих модулей в одном блоке location не проверено и не рекомендуется.
Узнайте больше о поведении ниже и проконсультируйтесь с конфигурацией для важных заметок о том, как избежать подготовки, если используют заголовки для атрибутов.
Для получения дополнительной информации о том, почему это выделенный модуль, см.
Следующие директивы добавляются в ваши файлы конфигурации NGINX. Контексты, упомянутые ниже, показывают, где они могут быть добавлены.
http , server , locationoffПереключает модуль запроса Auth Shibbaleth Auth и устанавливает URI, который будет предложено для разрешения. Настроенный URI должен относиться к блоку местоположения Nginx, который указывает на ваш авторизатор Shibbaleth Fastcgi.
Статус HTTP и заголовки ответа, полученные в результате подразделения до настроенного URI, будут возвращены пользователю в соответствии со спецификацией авторизатора FastCGI. Единственное (потенциально значимое) предостережение заключается в том, что из -за того, как Nginx работает в настоящее время в отношении подрезок (что фактически требует авторизатора), корпус запроса не будет направлен в авторизатор, и аналогично, корпус ответа от авторизатора не будет возвращен клиенту.
Однако настроенные URI не ограничиваются использованием бэкэнда FASTCGI для генерации ответа. Это может быть полезно во время тестирования или иного, так как вы можете использовать return Nginx, и rewrite директивы для создания подходящего ответа. Кроме того, этот модуль может использоваться с любым авторизатором FastCGI, хотя приведенная выше предостережение может повлиять на работу.
Предупреждение
Директива shib_request больше не требует флага shib_authorizer . Это должно быть удалено для начала Nginx. Никаких других изменений не требуется.
http , server , locationnone Установите variable на указанное value после завершения запроса AUTH. value может содержать переменные из ответа запроса AUTH. Например, $upstream_http_* , $upstream_status и любые другие переменные, упомянутые в документации nginx_http_upstream_module.
Эта директива может использоваться для введения атрибутов Shibboleth в среду бэкэнд -приложения, например, $ _server для приложения PHP FastCGI, и является рекомендуемым методом этого. Смотрите документацию по конфигурации для примера.
http , server , locationoffПримечание
Добавлено в v2.0.0.
Скопируйте атрибуты из ответа авторизатора Shibbaleth в основной запрос в качестве заголовков, делая их доступными для вверх по течению серверов и приложений. Используйте эту опцию только в том случае, если ваше приложение/приложение не поддерживает параметры сервера через shib_request_set .
При включении этой настройки заголовки ответов авторизатора, начиная с Variable-* извлечены, снятие Variable- подборы с имени заголовка и скопируется в основной запрос до того, как она будет отправлена в бэкэнд. Например, заголовок ответа авторизатора, такой как Variable-Commonname: John Smith приведет к тому, что Commonname: John Smith будет добавлен в основной запрос, и, таким образом, отправлено в бэкэнд.
Остерегайтесь подготовки - вы должны убедиться, что ваше бэкэндное приложение защищено от впрыскивания заголовков. Проконсультируйтесь с примером конфигурации о том, как это достичь.
Этот модуль может быть составлена по статически или динамически, так как введение динамических модулей в Nginx 1.9.11. Практическое выстрел динамических модулей заключается в том, что их можно загрузить, в отличие от статических модулей, которые постоянно присутствуют и включены.
Самый простой способ получить упакованную версию этого модуля-использовать инструмент PKG-OSS от Nginx, который обеспечивает упаковку динамических модулей для установки наряду с официальными выпусками Nginx из основных репозиторий и помогает избежать необходимости компилировать Nginx вручную.
В противном случае, чтобы динамически компилировать Nginx с этим модулем, передайте следующую опцию ./configure при создании Nginx:
-add-dynamic-module = <thate>
Вам нужно будет явно загрузить модуль в nginx.conf , включив:
load_module /path/to/modules/ngx_http_shibboleth_module.so;
и перезагрузить или перезагрузить nginx.
Чтобы составить Nginx с этим модулем статически, передайте следующую опцию ./configure при создании Nginx:
-add-module = <path>
При статической сборке никакой дополнительной загрузки не требуется, поскольку модуль встроен в Nginx.
Для получения полной информации о настройке среды Nginx/Shibbaleth см. Документацию по адресу https://github.com/nginx-shib/nginx-http-shibboleth/blob/master/config.rst.
Пример блока server состоит из следующего:
#FastCGI authorizer for Auth Request module
location = /shibauthorizer {
internal ;
include fastcgi_params;
fastcgi_pass unix:/opt/shibboleth/shibauthorizer.sock;
}
#FastCGI responder
location /Shibboleth.sso {
include fastcgi_params;
fastcgi_pass unix:/opt/shibboleth/shibresponder.sock;
}
# Using the ``shib_request_set`` directive, we can introduce attributes as
# environment variables for the backend application. In this example, we
# set ``fastcgi_param`` but this could be any type of Nginx backend that
# supports parameters (by using the appropriate *_param option)
#
# The ``shib_fastcgi_params`` is an optional set of default parameters,
# available in the ``includes/`` directory in this repository.
#
# Choose this type of configuration unless your backend application
# doesn't support server parameters or specifically requires headers.
location /secure-environment-vars {
shib_request /shibauthorizer;
include shib_fastcgi_params;
shib_request_set $shib_commonname $upstream_http_variable_commonname ;
shib_request_set $shib_email $upstream_http_variable_email ;
fastcgi_param COMMONNAME $shib_commonname ;
fastcgi_param EMAIL $shib_email ;
fastcgi_pass unix:/path/to/backend.socket;
}
# A secured location. All incoming requests query the Shibboleth FastCGI authorizer.
# Watch out for performance issues and spoofing!
#
# Choose this type of configuration for ``proxy_pass`` applications
# or backends that don't support server parameters.
location /secure {
shib_request /shibauthorizer;
shib_request_use_headers on;
# Attributes from Shibboleth are introduced as headers by the FastCGI
# authorizer so we must prevent spoofing. The
# ``shib_clear_headers`` is a set of default header directives,
# available in the `includes/` directory in this repository.
include shib_clear_headers;
# Add *all* attributes that your application uses, including all
#variations.
more_clear_input_headers 'displayName' 'mail' 'persistent-id' ;
# This backend application will receive Shibboleth variables as request
# headers (from Shibboleth's FastCGI authorizer)
proxy_pass http://localhost:8080;
}Обратите внимание, что мы используем модуль заголовков, чтобы очистить потенциально опасные заголовки ввода и избежать потенциала для подготовки. Последний пример с переменными окружающей среды не восприимчив к подделке заголовков, если бэкэнд считывает данные только из параметров среды.
Конфигурация по умолчанию доступна для очистки основных заголовков из авторизатора Shibbaleth, но вы должны убедиться, что вы пишете свои собственные четкие директивы для всех атрибутов, которые используют ваше приложение. Имейте в виду, что некоторые приложения попытаются прочитать атрибут Shibbaleth из среды, а затем вернуться к заголовкам, поэтому просмотрите код вашего приложения, даже если вы не используете shib_request_use_headers .
При использовании shib_request_set доступен файл PARAMS по умолчанию, который вы можете include в качестве NGINX, чтобы убедиться, что все основные переменные SHIBBOLETH передаются из авторизатора FASTCGI в приложение. Многочисленные атрибуты по умолчанию включены, поэтому удалите те, которые не требуются для вашего приложения, и добавьте атрибуты федерации или IDP, которые вам нужны. Этот файл параметров по умолчанию можно повторно использовать для восходящих по течению, которые не являются быстрыми, просто изменяя директивы fastcgi_param на uwsgi_param , scgi_param или так далее.
Подпинки, такие как запрос Auth Shibbaleth, не обрабатываются через заголовок. Это означает, что встроенные директивы, такие как add_header не будут работать, если он настроен как часть блока A /shibauthorizer . Если вам нужно манипулировать заголовками Subrequest, используйте more_set_headers из headers-more модуля.
См.
Этот модуль следует спецификации авторизации FastCGI, где это возможно, но имеет некоторые заметные отклонения - по уважительной причине. Поведение таким образом:
Подосредактирование авторизатора состоит из всех аспектов исходного запроса, за исключением органа запроса, поскольку Nginx не поддерживает буферизацию тел запроса. Поскольку авторитет Shibbaleth Fastcgi не учитывает тело запроса, это не проблема.
Если авторизатор подкраска возвращает статус 200 , доступен доступ.
Если включена shib_request_use_headers , и заголовки ответов, начиная с Variable-* извлечены, снятие подставки Variable- от имени заголовка и скопированные в основной запрос. Другие заголовки ответа авторизатора, не префиксируемые с помощью Variable- , и тело ответа игнорируется. Спецификация FastCGI призывает к включению пар Variable-* именных пар, но мы делаем их заголовками, так как они могут использоваться с любым бэкэнд (например, proxy_pass ), а не просто ограничивают себя приложениями FastCGI. Передавая данные Variable-* в качестве заголовков, мы в конечном итоге следуем поведению ShibUseHeaders On In mod_shib для Apache, который передает эти атрибуты пользователя в качестве заголовков.
Чтобы пройти атрибуты в качестве переменных среды (эквивалент ShibUseEnvironment On in mod_shib ), атрибуты должны быть извлечены вручную с помощью директив shib_request_set для каждого атрибута. Это не может (в настоящее время) массировать для всех атрибутов, поскольку каждая бэкэнд может принимать параметры по -разному ( fastcgi_param , uwsgi_param и т. Д.). Запросы на вытягивание могут автоматизировать это поведение.
Если SubRequest авторизатора возвращает любой другой статус (включая перенаправления или ошибки), статус и заголовки ответа авторизатора возвращаются клиенту.
Это означает, что на 401 Unauthorized или 403 Forbidden , доступ будет отказан, а заголовки (такие как WWW-Authenticate ) от авторизатора будут переданы клиенту. Все другие ответы авторизатора (такие как перенаправления 3xx ) передаются обратно клиенту, включая статус и заголовки, что позволяет перенаправления, такие как на страницы Wayf и респондент Shibboleth ( Shibboleth.sso ) правильно работать.
Спецификация авторизации FastCGI требует возврата корпуса ответа клиенту, но, поскольку Nginx в настоящее время не поддерживает ответные ответы подрегистрирования подразделения ( NGX_HTTP_SUBREQUEST_IN_MEMORY ), тело ответа авторизатора эффективно игнорируется. Обходной путь состоит в том, чтобы nginx служил собственной error_page , например, так:
location /secure {
shib_request /shibauthorizer;
error_page 403 /shibboleth-forbidden.html;
...
} Это служит данной страницей ошибки, если авторитетор Shibboleth отрицает доступ пользователя в это место. Без указанного error_page , Nginx будет обслуживать свои общие страницы ошибок.
Обратите внимание, что это не относится к респонденту Shibbaleth (обычно размещенному в Shibboleth.sso ), так как он является респондентом Fastcgi, а Nginx полностью совместим с этим, поскольку не используется подсекологии.
Для получения дополнительной информации см. Https://forum.nginx.org/read.php?2,2384444,238453.
В то время как этот модуль предназначен специально для авторизатора Fastcgi's Shibbaleth, он, вероятно, будет работать с другими авторизаторами, учитывая отклонения от спецификации выше.
Тесты автоматически выполняются на действиях GitHub (с использованием этой конфигурации) всякий раз, когда появляются новые коммиты в репозиторий или когда открываются новые запросы на привлечение. Если что -то сломается, вы будете проинформированы, и результаты будут сообщены на GitHub.
Тесты записываются с использованием комбинации простого сценария Bash для компиляции нашего модуля с различными версиями и конфигурациями Nginx и тестирования :: Nginx Perl Spaffolding для тестирования интеграции. Проконсультируйтесь с предыдущей ссылкой для получения информации о том, как расширить тесты, а также обратитесь к базовому тесту :: Базовая документация по таким аспектам, как функция Blocks ().
Интеграционные тесты запускаются автоматически с помощью CI, но также могут запускать вручную (требуется установка Perl & CPAN):
cd nginx-http-shibboleth
cpanm --notest --local-lib= $HOME /perl5 Test::Nginx
# nginx must be present in PATH and built with debugging symbols
PERL5LIB= $HOME /perl5/lib/perl5 proveЗапросы на поддержку конфигурации Shibbaleth и настройки Nginx или веб -сервера должны быть направлены в список рассылки пользователей сообщества Shibboleth. См. Https://www.shibboleth.net/community/lists/ для деталей.
Из -за сложного характера стека Nginx/FastCgi/Shibboleth, проблемы с настройкой отладки могут быть затрудненными. Вот несколько ключевых моментов:
Убедитесь, что nginx-http-shibboleth успешно создан и установлен в NGINX. Вы можете проверить, запустив nginx -V и осмотрев вывод на --add-module=[path]/nginx-http-shibboleth или --add-dynamic-module=[path]/nginx-http-shibboleth .
При использовании динамических модулей для NGINX подтвердите, что вы использовали директиву load_module для загрузки этого модуля. Ваше использование shib_request и других директив потерпит неудачу, если вы забыли загрузить модуль.
Если вы используете версию Nginx, которая отличается от тех, с которыми мы тестируем, или если вы используете другие сторонние модули, вам следует запустить тестовый набор выше, чтобы подтвердить совместимость. Если какие -либо тесты не сняты, затем проверьте свою конфигурацию или рассмотрите обновление версии NGINX.
Конфигурация Shibbaleth: проверьте свой shibboleth2.xml и связанную конфигурацию, чтобы убедиться, что ваши хосты, пути и атрибуты будут правильно выпущены. Пример конфигурации может помочь вам идентифицировать ключ «Gotchas» для настройки shibboleth2.xml для работы с авторизатором FastCGI.
Уровень приложения: В рамках вашего кода всегда начинайте с самой простой возможного вывода отладки (например, печать среды запроса) и работать оттуда. Если вы хотите создать основное, автономное приложение, посмотрите на конфигурацию бутылки на вики.
Отладка модуля Внутренства: если вы тщательно проверили все вышеперечисленное, вы также можете отладить поведение самого модуля. Вам нужно будет скомпилировать Nginx с поддержкой отладки (через ./auto/configure --with-debug ... ), и при запуске Nginx проще всего, если вы можете запустить на переднем плане с включенной журналом отладки. Добавьте следующее в свой nginx.conf :
daemon off ;
error_log stderr debug ;и запустить nginx. После начала Nginx вы должны увидеть строки, содержащие [отладку] и при выполнении запросов, ведение журнала консоли будет продолжаться. Если этого не произойдет, проверьте процесс конфигурации NGINX и компиляции.
Когда вы в конечном итоге сделаете запрос, который попадает (или должен вызвать) блок местоположения shib_request , вы увидите такие строки, как в выходе:
[debug] 1234 #0: shib request handler
[debug] 1234 #0: shib request set variables
[debug] 1234 #0: shib request authorizer handler
[debug] 1234 #0: shib request authorizer allows access
[debug] 1234 #0: shib request authorizer copied header: "AUTH_TYPE: shibboleth"
[debug] 1234 #0: shib request authorizer copied header: "REMOTE_USER: [email protected]"
... Если вы не видите эти типы строк, содержащих запрос SHIB ... или если вы видите некоторые из приведенных выше строк, но не в тех случаях, когда копируются заголовки/переменные, то дважды проверьте конфигурацию NGINX. Если вы все еще никуда не попадаете, вы можете добавить свои собственные линии отладки в источник (следуйте примерам этого модуля), чтобы в конечном итоге определить, что идет не так, и когда. Если это сделать, не забудьте перекомпилировать Nginx и/или nginx-http-shibboleth когда вы вносите изменения.
Если вы считаете, что нашли ошибку в коде Core Module, то, пожалуйста, создайте проблему.
Вы также можете искать существующие проблемы, так как, вероятно, кто -то другой сталкивался с аналогичной проблемой раньше.
Этот модуль использует семантическую версию, и все выпуски помечены на GitHub, что позволяет загружать пакеты отдельных тегов.
Этот проект лицензирован по той же лицензии, что и NGINX, 2-й оформление BSD-лицензии.