python django shibboleth saml-2.0

python - Django y Shibboleth



saml-2.0 (3)

Estoy investigando las opciones para usar Shibboleth en una implementación de Django. Por lo que he encontrado, las cosas se ven un poco escasas. ¿Alguien puede comentar sobre lo siguiente?

  • ¿Alguien está utilizando el módulo django_shibboleth (consulte http://code.arcs.org.au/gitorious/django/django-shibboleth/trees/1.1 )? Si es así, ¿qué experiencias has tenido con este módulo?

  • Las implementaciones de SAML 2 para Django (por ejemplo, django-saml2-sp) y Python en general (por ejemplo, pysaml2) parecen ser algo experimentales e incluyen poca documentación. ¿Alguien sabe de soluciones SAML 2 estables para Django / Python?

¡Gracias de antemano por cualquier ayuda!


Hay disponible un módulo django-shibboleth que se puede usar para obtener atributos de un IdP y asignarlos a los usuarios en el sistema de autenticación Django. La mayor parte del trabajo lo realiza Shibboleth en sí, con solo una pequeña cantidad de código requerido para el mapeo.

El embalaje está disponible desde aquí.

linuxsoft.cern.ch/internal/repos/ai6-stable/x86_64/os/Packages/django-shibsso-0.1-1.noarch.rpm

o la fuente de aquí.

linuxsoft.cern.ch/internal/repos/ai6-stable/source/SRPMS/django-shibsso-0.1-1.src.rpm

Siga las instrucciones de Shibboleth para configurar su proveedor local de servicios (SP) de Shibboleth para su uso con un IdP.

En el archivo http.conf o en la configuración de su propia aplicación en conf.d, cree la siguiente entrada.

<Location /shibboleth> AuthType shibboleth ShibRequireSession On ShibUseHeaders On require valid-user </Location>

Esto debería hacer que las URL a / shibboleth sean dirigidas a la página de inicio de sesión de IdP. Después de iniciar sesión correctamente, se devolverá una página 404.

Agregue la configuración, reemplazando la aplicación con el nombre de su aplicación.

<Location "/"> SetHandler mod_python PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE app.settings PythonDebug Off </Location>

Esto debería generar el siguiente error después de iniciar sesión a través de la URL / shibboleth. La URL actual, Shibboleth.sso / ADFS, no coincide con ninguno de estos.

Para resolver este problema, debe agregar lo siguiente a la configuración.

<Location /Shibboleth.sso> SetHandler None </Location>

/var/log/shibboleth/transaction.log debe indicarle qué atributos se liberan.


Recomendaría usar el SP Shibboleth Native (apache mod_shib). Está bien probado, tiene una gran base de usuarios y es muy estable.

django_shibboleth un vistazo rápido al módulo django_shibboleth , y parece que depende de mod_shib, y no hace ningún SAML por sí solo. En este sentido, ese módulo es muy simple y probablemente funcione bien.

No he visto ninguna implementación SAML2 de python completa (o en su mayoría completa), y ninguna que sea un proyecto activo. La seguridad XML y los requisitos de cifrado son un problema para Python, y esto probablemente contribuye a la falta de bibliotecas.

[EDITAR - Repetiré parte de eso] La biblioteca pysaml2 tiene alguna actividad de desarrollo, y parece bastante completa desde un simple vistazo. Utiliza el binario xmlsec1 directamente para firmas y cifrado, y por lo tanto no se basa en ningún enlace desactualizado. Esta es probablemente su mejor apuesta para usar SAML2 directamente en Python en este momento.


Si bien no tengo experiencia con Django + Shibboleth, tengo algo con Shibboleth "simple".

Si su Apache tiene mod_shibboleth configurado correctamente, entonces integrarlo con una aplicación web es relativamente trivial. Echa un vistazo al módulo django_shibboleth y puedes ver que no contiene mucho código.

En particular, si tiene mod_shibboleth ya ejecutándose, no use una biblioteca SAML 2 de terceros. Esos traen mucha complejidad innecesaria.