.. 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 服务提供者和身份提供者的功能。应用程序可以实现其中一个或两者。
flask-saml2 兼容 Flask 1.0+ 和 Python 3.6+。
这是一个经过大幅修改的 NoodleMarkets/dj-saml-idp_ 分支,而后者又是从 deforestg/dj-saml-idp_ 分支而来,再往前追溯则是 novapost/django-saml2-idp_ 的分支。
关于 SAML 工作原理的详细介绍,请查阅网络上的其他指南。以下是对本包中使用的一些术语的快速介绍。
SAML 协议是两方之间的对话:身份提供者(IdP) 和 服务提供者(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,我们使用 tox 针对不同版本的 Flask 和 Python 运行测试。测试可以通过 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