
Библиотека Flask для создания поставщиков услуг SAML и поставщиков удостоверений
.. note:: Ищем мейнтейнеров. Этот проект больше не поддерживается. Библиотека работает — вернее, работала, когда я пользовался ею в последний раз, — но я больше не работаю над проектом, для которого она была создана. Если вы заинтересованы в том, чтобы взять на себя руководство и сопровождение этого проекта, пожалуйста, свяжитесь со мной.
.. 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/
Этот плагин Flask предоставляет функциональность для создания как поставщиков услуг (SAML Service Providers), так и поставщиков удостоверений (Identity Providers). Приложения могут реализовывать одного из этих поставщиков или обоих.
flask-saml2 работает с Flask 1.0+ и Python 3.6+.
Это сильно модифицированный форк NoodleMarkets/dj-saml-idp, который, в свою очередь, является форком deforestg/dj-saml-idp, который, в свою очередь, является форком novapost/django-saml2-idp_.
За полным описанием того, как работает SAML, обратитесь к руководствам в интернете. Для краткого введения и обзора некоторой терминологии, используемой в этом пакете, читайте далее.
Протокол SAML — это диалог между двумя сторонами: поставщиками удостоверений (Identity Provider, IdP) и поставщиками услуг (Service Provider, SP). Когда неаутентифицированный клиент (обычно браузер) обращается к поставщику услуг, поставщик услуг формирует запрос аутентификации (AuthnRequest), подписывает его с помощью своего закрытого ключа и затем пересылает этот запрос через клиента поставщику удостоверений. После того как клиент входит в систему у центрального поставщика удостоверений, поставщик удостоверений формирует ответ, подписывает его и пересылает этот ответ через клиента запросившему поставщику услуг. Затем клиент аутентифицируется у поставщика услуг через центрального поставщика удостоверений, при этом поставщику услуг не нужно ничего знать о методе аутентификации или используемых паролях.
Минимальную, но функциональную примерную реализацию как поставщика услуг, так и поставщика удостоверений можно найти в каталоге examples/ этого репозитория. Чтобы запустить примеры, сначала склонируйте репозиторий и установите зависимости:
.. 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
Затем запустите IdP и SP в отдельных окнах терминала:
.. 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
Наконец, перейдите по адресу http://localhost:9000/, чтобы открыть целевую страницу поставщика услуг.
В качестве средства запуска тестов используется pytest, а для запуска тестов на разных версиях Flask и Python мы используем tox. Тесты можно запускать локально, используя tox напрямую (желательно в виртуальном окружении)::
$ pip install tox
$ tox
Распространяется под лицензией 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