
Librería de Flask para construir Proveedores de Servicios SAML y Proveedores de Identidad
.. note:: Buscando mantenedores. Este proyecto no está mantenido. La biblioteca funciona, o así era cuando la usé por última vez, pero ya no trabajo en el proyecto para el que se construyó. Si estás interesado en asumir el liderazgo y el mantenimiento de este proyecto, ponte en contacto.
.. image:: https://travis-ci.com/timheap/flask-saml2.svg?branch=master :target: https://travis-ci.com/timheap/flask-saml2 .. image:: https://badge.fury.io/py/flask-saml2.svg :target: https://pypi.org/project/flask-saml2/ .. image:: https://readthedocs.org/projects/flask-saml2/badge/?version=latest :target: https://flask-saml2.readthedocs.io/en/latest/
Este plugin de Flask proporciona funcionalidad para crear tanto Proveedores de Servicio como Proveedores de Identidad SAML. Las aplicaciones pueden implementar uno o ambos de estos proveedores.
flask-saml2 funciona con Flask 1.0+ y Python 3.6+.
Este es un fork muy modificado de NoodleMarkets/dj-saml-idp, que a su vez
es un fork de deforestg/dj-saml-idp, que a su vez es un fork de
novapost/django-saml2-idp_.
Para obtener una descripción completa de cómo funciona SAML, busca guías en otros lugares de internet. Para una introducción rápida y un repaso de parte de la terminología utilizada en este paquete, sigue leyendo.
El protocolo SAML es una conversación entre dos partes: Proveedores de Identidad (IdP) y Proveedores de Servicio (SP). Cuando un cliente no autenticado (normalmente un navegador) accede a un Proveedor de Servicio, el Proveedor de Servicio realiza una solicitud de autenticación (AuthnRequest), la firma con su clave privada y luego envía esta solicitud al Proveedor de Identidad a través del cliente. Una vez que el cliente inicia sesión en el Proveedor de Identidad central, el Proveedor de Identidad crea una respuesta, la firma y la envía al Proveedor de Servicio solicitante a través del cliente. El cliente queda entonces autenticado en el Proveedor de Servicio a través del Proveedor de Identidad central, sin que el Proveedor de Servicio tenga que saber nada sobre el método de autenticación ni las contraseñas implicadas.
Se puede encontrar un ejemplo de implementación mínimo pero funcional tanto de un Proveedor de Servicio
como de un Proveedor de Identidad en el directorio examples/ de este
repositorio. Para que los ejemplos funcionen, primero clona el repositorio e instala
las dependencias:
.. code-block:: console
$ git clone https://github.com/timheap/flask-saml2
$ cd flask-saml2
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -e .
$ pip install -r tests/requirements.txt
A continuación, ejecuta el IdP y el SP en ventanas de terminal separadas:
.. code-block:: console
$ cd flask-saml2
$ source venv/bin/activate
$ ./examples/idp.py
.. code-block:: console
$ cd flask-saml2
$ source venv/bin/activate
$ ./examples/sp.py
Por último, navega a http://localhost:9000/ para acceder a la página de inicio del Proveedor de Servicio.
El ejecutor de pruebas es pytest y usamos tox para ejecutar las pruebas contra
diferentes versiones de Flask y Python. Las pruebas se pueden ejecutar localmente usando
tox directamente (preferiblemente en un entorno virtual)::
$ pip install tox
$ tox
Distribuido bajo la MIT License_.
.. _NoodleMarkets/dj-saml-idp: https://github.com/NoodleMarkets/dj-saml-idp
.. _deforestg/dj-saml-idp: https://github.com/deforestg/dj-saml-idp
.. _novapost/django-saml2-idp: https://github.com/novapost/django-saml2-idp
.. _MIT License: https://github.com/mobify/dj-saml-idp/blob/master/LICENSE