はじめに
Streamlitのバージョン1.42.0からOpenID Connect(OIDC)によるユーザー認証が追加されました。
さっそく試してみました。
OIDCプロバイダーの準備
Google IdentityやMicrosoft Entra IDが有名ですが、今回はAuth0で試してみます。
ローカルで開発しているので、OIDCプロバイダーのAllowed Callback URLsにhttp://localhost:8501/oauth2callback
を追加しておきます。
実装
OIDCプロバイダーの設定
.streamlit/secrets.toml
に使用するIDプロバイダーの設定を記載します。
今回はAuth0の例です。
[auth]
redirect_uri = "http://localhost:8501/oauth2callback"
cookie_secret = "xxx"
[auth.auth0]
client_id = "xxx"
client_secret = "xxx"
server_metadata_url = (
"https://{account}.{region}.auth0.com/.well-known/openid-configuration"
)
client_kwargs = { "prompt" = "login" }
redirect_uri
やclient_id
などを設定します。
複数プロバイダーを設定することも可能です。
Streamlitのコード
import streamlit as st
if not st.experimental_user.is_logged_in:
if st.button("Login with Auth0"):
st.login("auth0")
else:
st.write(f"Hello, {st.experimental_user.name}!")
st.button("Log out", on_click=st.logout)
-
st.login()
- ユーザーをIDプロバイダーにリダイレクト
-
st.experimental_user
-
is_logged_in
属性でログイン状態を確認できる
-
-
st.logout()
- ユーザーのブラウザからIDクッキーを削除
テスト
main.py
を実行して、ブラウザにアクセスすると設定したログインボタンが表示されます。
このボタンをクリックすると、Auth0のログイン画面が表示されます。
Auth0でユーザー管理しているユーザーでログインすると、成功して画面が遷移します。
当たり前ですが、ユーザー管理していないアカウントでログインしようとすると失敗し後続の処理に行けません。
ちゃんとユーザー認証が機能していることが確認できました!
おわりに
Streamlitに追加された認証機能を試してみました。
標準機能として認証が追加されたので、開発しやすくなったのではないでしょうか。
ユーザー認証機能によって、ユーザーに合わせてアプリをパーソナライズすることで可能になります。
セッション間の履歴が保存されるチャットボットなど、様々なユースケースで利用できそうです!