Django и Shibboleth

#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 самостоятельно. В этом отношении этот модуль очень прост и, вероятно, работает хорошо.

Я не видел никаких полных (или в основном полных) реализаций python SAML2, и ни один из них не является активным проектом. Требования к безопасности xml и криптографии являются проблемой в python, и это, вероятно, способствует нехватке библиотек.

[РЕДАКТИРОВАТЬ — я откажусь от части этого] Библиотека 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 — все работает, как ожидалось.