概要
Python の authlib を使えば簡単に OpenIDConnect を使った認証機能を Web アプリケーションに追加することができます
今回は Flask + authlib を使って Onelogin の OpenIDConnect に接続して認証を追加してみました
環境
- macOS 11.7.4
- Python 3.10.2
- authlib 1.2.0
- Flask 2.2.3
Onelogin 側の設定
OIDC アプリを作成してユーザの追加やリダイレクトURIの設定をしておきましょう
リダイレクトURIは今回は localhost で動作させるので「http://localhost:5000/callback」 を追加しておきましょう
あとはコードに必要になる「Client ID」「Client Secret」「Issuer URL」あたりをコピーしておきます
サンプルコード
-
vim app.py
from flask import (Flask,
url_for,
session,
redirect)
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = "xxx"
app.config["ONELOGIN_CLIENT_ID"] = "xxxx"
app.config["ONELOGIN_CLIENT_SECRET"] = "xxxx"
oauth = OAuth(app)
oauth.register(
name="onelogin",
server_metadata_url="https://xxxxxx.onelogin.com/oidc/2/.well-known/openid-configuration",
client_kwargs={"scope": "openid email profile"}
)
@app.route("/")
def homepage():
user = session.get("user")
if user is None:
return redirect("/login")
return f"user => {user}"
@app.route("/login", methods=["GET"])
def login():
redirect_uri = url_for("auth", _external=True)
return oauth.onelogin.authorize_redirect(redirect_uri)
@app.route("/callback")
def auth():
token = oauth.onelogin.authorize_access_token()
session["user"] = token["userinfo"]
return redirect("/")
@app.route("/logout")
def logout():
session.pop("user", None)
return redirect("/")
設定を変更するのは ONELOGIN_CLIENT_ID
, ONELOGIN_CLIENT_SECRET
, server_metadata_url
です
動作確認
- pipenv run flask run
でブラウザで localhost:5000 にアクセスすると onelogin のログイン画面になるのでそこでログ人すれば OK です
最後に
Python の authlib を使って OpenIDConnect 認証を追加する方法を紹介しました
OpenIDConnect 自体 OAuth2 のラップなので認証方法はほぼ OAuth2 と同じになります
0 件のコメント:
コメントを投稿