2018年8月16日木曜日

Python で Okta の SAML 認証が動作するサンプルアプリを作成してみた

概要

Okta のトライアル期間であれば SAML 認証が試せたので Python アプリを構築して確認してみました
Python は 2 系を使います
(おそらく Python3 では動作しないと思います、自分が試した感じ動作しませんでした)

環境

  • macOS 10.13.6
  • Okta (2018/08/13 時点)
  • Python 2.7.15

Python 用のアプリケーション作成

まずは Okta 側にアプリケーションを登録します
管理者権限のあるユーザでログインし管理画面から「Applications」を開きます
そして「Add Application」を選択します
okta_python_app_saml4.png

一覧から選択せずに「Create New App」で作成します
okta_python_app_saml5.png

「Sign on method」で SAML 2.0 を選択します
okta_python_app_saml6.png

アプリの名前を設定します
今回は「PySAML2 Example」とします
okta_python_app_saml7.png

SAML 認証に必要なアプリ側の URL を設定します
今回は

  • Single sign on URL・・・http://localhost:5000/saml/sso/example-okta-com
  • Audience Restriction・・・http://localhost:5000/saml/sso/example-okta-com

とします
また Single sign on URL の「Use this for Recipient URL and Destination URL」にチェックを入れます
okta_python_app_saml8.png

同じ画面のすぐ下に Attribute を設定できる画面があるので 3 つ追加します

  • FirstName・・・user.firstName
  • LastName・・・user.lastName
  • Email・・・user.email

okta_python_app_saml9.png

アプリがどういったタイプなのか設定します
今回はテストアプリなので「I’m an Okta customer adding an internal app」にチェックしかつ「This is an internal app that we have created」にチェックし内部で使用するアプリである設定にします
okta_python_app_saml10.png

これでアプリの作成ができました
Identity Provider metadata というリンクがあり XML が表示されます
この URL をコピーしておきましょう
okta_python_app_saml11.png

アプリを追加しただけでは使えません
アプリに対してユーザをアサインすることで対象のユーザで認証できるようになります
「Assignments」->「Assign」->「Assign to People」で追加します
okta_python_app_saml12.png

一覧から追加したいユーザを選択してアサインしましょう
okta_python_app_saml13.png

アサインが完了するとユーザが一覧に表示されるようになります
このユーザでアプリの認証ができるか確認します
okta_python_app_saml14.png

サンプルアプリ構築

今回は Python アプリを構築します
公式が

必要なライブラリのインストール

  • brew install libffi libxmlsec1

アプリの設定

59 行目あたりの metadata_url_for の部分を以下のように書き換えます
事前にコピーしておいた metadata 取得用の URL に変更します

metadata_url_for = {
    'example-okta-com': 'https://{yourOktaDomain}/app/a0b1c2deFGHIJKLMNOPQ/sso/saml/metadata'
}

URL の部分はサンプルなので各自の環境に書き換えてください

virtualenv 構築、PySAML2 のインストール

  • cd okta-pysaml2-example
  • virtualenv venv
  • source venv/bin/activate
  • pip install -r requirements.txt

アプリ起動

  • python app.py

動作確認

localhost:5000 にアクセスしましょう
example-okta-com をクリックすると認証画面が表示されます
okta_python_app_saml1.png

Okta に登録してありかつ PySAML2 Example アプリにアサインしてユーザでログインしましょう
okta_python_app_saml2.png

成功するとアプリのログイン後の画面が表示されます
okta_python_app_saml3.png

最後に

Okta の SAML 認証連携機能を試してみました
今回は Python で試しましたが他の言語でもライブラリが提供されているのでアプリに組み込むことはできると思います

これを使うことで Okta にある ID/PW を使って自分のアプリを認証させることができるようになります
Okta には ActiveDirectory と連携する機能もあるので例えばオンプレの AD サーバの情報を Okta にインポートしてから SAML 連携すれば既存の AD の認証情報を使った認証機構を作成することもできます

要するに Okta が Idp となり認証情報を提供してくれる感じです
クラウド上で認証情報を管理することができるようになるのでオンプレの環境が不要になり管理コストが減るなどのメリットがあるかなと思います

参考サイト

0 件のコメント:

コメントを投稿