はじめに
Windows環境で、SAMLベースSSO(シングルサインオン)を試してみました。
SP(サービスプロバイダ)として、Pythonライブラリpython3-samlを使用、
IdP(IDプロバイダ)として、Azure AD(Active Directory)を使用しました。
Azure Active Directory(Azure AD)とは
- クラウドベースのIDおよびアクセス管理サービス
- Microsoft 365/Azure portal/その他SaaSアプリ、など外部リソースへのアクセスを支援
- イントラネットネットワーク上のアプリなど内部リソースと、組織向けクラウドアプリへのアクセスを支援
python3-samlとは
- SAML認証のPython3ツールキット
- PythonソフトウェアでSAML認証機能を実装する場合使用
検証開始
Azure ADにアプリを登録し、SAMLベースのSSOをセットアップ
Windows環境にpython3-samlをインストールし、起動
検証環境
- OS: Windows 10
- pyenv
python3-samlを入手
git clone https://github.com/onelogin/python3-saml.git
SAML設定
python3-saml\demo-flask\saml\settings.json
設定ファイルを編集
{
"strict": true,
"debug": true,
"sp": {
"entityId": "https://localhost:5000/metadata/",
"assertionConsumerService": {
"url": "https://localhost:5000/?acs",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
},
"singleLogoutService": {
"url": "https://localhost:5000/?sls",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
},
"NameIDFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
"x509cert": "",
"privateKey": ""
},
"idp": {
"entityId": "<AzureAD EntityID >",
"singleSignOnService": {
"url": "<AzureAD SSO Service >",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
},
"singleLogoutService": {
"url": "<AzureAD SingleLogout Service String >",
"binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
},
"x509cert": " <AzureAD_X509_String> "
}
}
Python3.6をインストール
pyenv install 3.6.8
pyenv local 3.6.8
pyenv version
3.6.8
依存ライブラリをインストール
python3-samlのdemo-flaskアプリをSPとして使用します。
cd python3-saml
cd demo-flask
pip install python3-saml
pip install flask==1.1.4
アプリ実行
-
Let's Encrypt
などを使用し、SSL証明書を作成-
fullchain.pem
、privkey.pem
をpython3-saml\demo-flask
に配置。
-
-
アプリ起動
set FLASK_APP=index.py
flask run --host localhost --cert fullchain.pem --key privkey.pem
* Serving Flask app "index.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on https://localhost:5000/ (Press CTRL+C to quit)
ブラウザからhttps://localhost:5000
にアクセス
Logonボタンをクリックすると、SAMLベースのSSO認証が行われる
おわりに
Windows環境で、python3-samlを検証してみました。
SAMLベースSSO検証の一助になれば何よりです。