Джанго и Шибболет
Я изучаю варианты использования 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
Я бы рекомендовал использовать Shibboleth Native SP (apache mod_shib). Он хорошо протестирован, имеет большую пользовательскую базу и очень стабилен.
Я быстро просмотрел модуль django_shibboleth, и, похоже, он зависит от mod_shib и не делает никаких SAML на нем своя. В этом отношении этот модуль очень прост и, вероятно, хорошо работает.
Я не видел никаких полных (или в основном полных) реализаций SAML2 python, и ни один из них не является активным проектом. Требования к безопасности и криптографии xml - это боль в python, и это, вероятно, способствует к недостатку библиотек.
[EDIT - я отчасти откажусь от этого] Библиотека 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.
Добавьте конфигурацию, заменив приложение именем вашего приложения.
<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/transaction.log должен сообщить вам, какие атрибуты будут выпущены.