
Biblioteca Flask para construir Provedores de Serviço SAML e Provedores de Identidade
.. note:: À procura de mantenedores. Este projeto não é mantido. A biblioteca funciona, ou funcionava da última vez que a usei, mas já não trabalho no projeto para o qual foi construída. Se estiver interessado em assumir a liderança e manutenção deste projeto, por favor entre em 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 Flask fornece funcionalidade para criar tanto Service Providers SAML como Identity Providers. As aplicações podem implementar um ou ambos estes fornecedores.
O flask-saml2 funciona com Flask 1.0+ e Python 3.6+.
Este é um fork bastante modificado do NoodleMarkets/dj-saml-idp_ que por sua vez
é um fork do deforestg/dj-saml-idp_ que por sua vez é um fork do
novapost/django-saml2-idp_.
Para uma descrição completa de como o SAML funciona, por favor procure guias noutros locais da internet. Para uma introdução rápida e uma explicação de alguma da terminologia usada neste pacote, continue a ler.
O protocolo SAML é uma conversa entre duas partes: Identity Providers (IdP) e Service Providers (SP). Quando um cliente não autenticado (normalmente um navegador) acede a um Service Provider, o Service Provider irá fazer um pedido de autenticação (AuthnRequest), assiná-lo com a sua chave privada, e depois encaminhar este pedido através do cliente para o Identity Provider. Assim que o cliente inicia sessão no Identity Provider central, o Identity Provider cria uma resposta, assina-a, e encaminha esta resposta através do cliente para o Service Provider requisitante. O cliente é então autenticado no Service Provider através do Identity Provider central, sem que o Service Provider precise de saber nada sobre o método de autenticação ou quaisquer palavras-passe envolvidas.
Um exemplo mínimo mas funcional de implementação tanto de um Service Provider como de
um Identity Provider pode ser encontrado no diretório examples/ deste
repositório. Para executar os exemplos, primeiro clone o repositório e instale
as dependências:
.. 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
De seguida, execute o IdP e o SP em terminais separados:
.. 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
Finalmente, navegue para http://localhost:9000/ para aceder à página inicial do Service Provider.
O executor de testes é pytest e estamos a usar tox para executar testes em
diferentes versões do Flask e Python. Os testes podem ser executados localmente usando
tox diretamente (de preferência num ambiente virtual)::
$ pip install tox
$ tox
Distribuído sob a 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