#python #django #shibboleth #saml-2.0
#python #django #shibboleth #saml-2.0
Вопрос:
Я изучаю варианты использования Shibboleth в развертывании Django. Из того, что я нашел, все выглядит несколько скудно. Кто-нибудь может прокомментировать следующее?
- Кто-нибудь использует модуль django_shibboleth (см. http://code.arcs.org.au/gitorious/django/django-shibboleth/trees/1.1 )? Если да, то какой опыт у вас был с этим модулем?
- Реализации SAML 2 для Django (например, django-saml2-sp) и Python в целом (например, pysaml2) кажутся несколько экспериментальными и содержат мало документации. Кто-нибудь знает о стабильных решениях SAML 2 для Django / Python?
Заранее спасибо за любую помощь!
Комментарии:
1. Какие функции вам нужны? Будете ли вы проходить аутентификацию только с одним IdP или вам нужны DS, WAYF, федерация, разрешение артефактов, выход из системы и так далее?
2. Отличные вопросы! Для этого конкретного проекта потребуются DS, WAYF и т. Д.
3. Особенно, если вы собираетесь использовать не только базовые функции SAML, я бы придерживался первой части своего ответа и согласился с @hrnt. Включение собственного SP shibboleth будет самым надежным маршрутом.
4. @JimB: Могу ли я использовать этот модуль django для нескольких IDP? мне нужно использовать Shibboleth для моего веб-сайта django? что вы предлагаете? модуль apache или модуль django? мое требование — использовать несколько idp.
5. @Lahiruzz: как я уже сказал в своем ответе, для модуля django требуется apache mod_shib. Вам нужно использовать оба.
Ответ №1:
Я бы рекомендовал использовать собственный SP Shibboleth (apache mod_shib). Он хорошо протестирован, имеет большую базу пользователей и очень стабилен.
Я быстро взглянул на модуль django_shibboleth, и кажется, что он зависит от mod_shib и не выполняет никаких SAML самостоятельно. В этом отношении этот модуль очень прост и, вероятно, работает хорошо.
[РЕДАКТИРОВАТЬ — я откажусь от части этого] Библиотека pysaml2 имеет некоторую активность в области разработки и на первый взгляд выглядит довольно полной. Он использует двоичный файл xmlsec1 непосредственно для подписи и шифрования и, следовательно, не полагается на какие-либо устаревшие привязки. Вероятно, это ваш лучший выбор для использования SAML2 непосредственно в python на данный момент.
Ответ №2:
Хотя у меня нет опыта работы с Django Shibboleth, у меня есть опыт работы с «простым» Shibboleth.
Если в вашем Apache правильно настроен mod_shibboleth, то интеграция его с веб-приложением относительно тривиальна. Ознакомьтесь с модулем django_shibboleth, и вы увидите, что он не содержит такого большого количества кода.
В частности, если у вас уже запущен mod_shibboleth, не используйте стороннюю библиотеку SAML 2. Это привносит много ненужных сложностей.
Ответ №3:
Доступен модуль django-shibboleth, который можно использовать для получения атрибутов из IdP и сопоставления их пользователям в системе аутентификации Django. Большая часть работы выполняется самим Shibboleth, при этом для сопоставления требуется лишь небольшое количество кода.
Упаковка доступна отсюда.
linuxsoft.cern.ch/internal/repos/ai6-stable/x86_64/os/Packages/django-shibsso-0.1-1.noarch.rpm
или источник отсюда.
linuxsoft.cern.ch/internal/repos/ai6-stable/source/SRPMS/django-shibsso-0.1-1.src.rpm
Следуйте инструкциям Shibboleth для настройки вашего локального поставщика услуг Shibboleth (SP) для использования с IdP.
В файле http.conf или в вашей собственной конфигурации приложения в conf.d создайте следующую запись.
<Location /shibboleth>
AuthType shibboleth
ShibRequireSession On
ShibUseHeaders On
require valid-user
</Location>
Это должно привести к тому, что URL-адреса /shibboleth будут перенаправлены на страницу входа IdP. После успешного входа в систему будет возвращена страница 404.
Добавьте конфигурацию, заменив app именем вашего приложения.
<Location "/">
SetHandler mod_python
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE app.settings
PythonDebug Off
</Location>
Это должно привести к следующей ошибке после входа в систему через URL /shibboleth .
Текущий URL-адрес, Shibboleth.sso/ADFS, не соответствует ни одному из них.
Чтобы решить эту проблему, вам необходимо добавить в конфигурацию следующее.
<Location /Shibboleth.sso>
SetHandler None
</Location>
/var/log/shibboleth/транзакция.в журнале должно быть указано, какие атрибуты освобождены.
Комментарии:
1. Вместо установки
SetHandler None
«/Shibboleth.sso» также может помочь изменение порядка загрузки модулей Apache. Я столкнулся с аналогичной ситуацией с mod_passenger mod_shib2. Например, если mod_shib2 загружается после mod_passenger, то местоположение «/Shibboleth.sso» обрабатывается пассажирским приложением (что является нежелательным поведением). Если mod_shib2 загружен до mod_passenger — все работает, как ожидалось.