
SAMLサービスプロバイダとアイデンティティプロバイダを構築するためのFlaskライブラリ
.. 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 Provider と Identity Provider の両方を作成するための機能を提供します。アプリケーションは、これらのプロバイダーの一方または両方を実装できます。
flask-saml2 は Flask 1.0+ および Python 3.6+ で動作します。
これは NoodleMarkets/dj-saml-idp_ を大幅に改変したフォークです。その NoodleMarkets/dj-saml-idp_ は deforestg/dj-saml-idp_ のフォークであり、さらにその deforestg/dj-saml-idp_ は novapost/django-saml2-idp_ のフォークです。
SAML の仕組みの完全な説明については、インターネット上の他のガイドを参照してください。このパッケージで使用される用語の簡単な紹介と説明については、以下をお読みください。
SAML プロトコルは、Identity Provider (IdP) と Service Provider (SP) の二者間の会話です。未認証のクライアント(通常はブラウザ)が Service Provider にアクセスすると、Service Provider は 認証要求 (AuthnRequest) を作成し、秘密鍵で署名して、この要求をクライアント経由で Identity Provider に転送します。クライアントが中央の Identity Provider でログインすると、Identity Provider は応答を作成し、署名して、この応答をクライアント経由で要求元の Service Provider に転送します。クライアントは中央の Identity Provider を介して Service Provider で認証され、Service Provider は認証方法や関連するパスワードについて何も知る必要はありません。
このリポジトリの examples/ ディレクトリには、Service Provider と Identity Provider の両方の最小限だが機能する実装例があります。例を実行するには、まずリポジトリをクローンして依存関係をインストールします。
.. 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/ にアクセスして Service Provider のランディングページを表示します。
テストランナーは 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