Skip to content
チュートリアル
Streamlit
Streamlit-Authenticator:Streamlitアプリでユーザー認証を安全にする方法

Streamlit-Authenticator:Streamlitアプリでユーザー認証を安全にする方法

Streamlitは、2019年の創設以来、クラウドへのアプリの開発と展開の方法を革新しました。しかし、Streamlitアプリでの安全なユーザー認証の必要性がより明確になってきたことから、Streamlit-Authenticatorという解決策が現れました。この記事では、Streamlit-Authenticatorを使用してStreamlitアプリに安全なユーザー認証を追加するための包括的なガイドを提供します。

Streamlit-Authenticatorとは?

Streamlit-Authenticatorは、Streamlitアプリケーションでユーザーの認証情報を検証することができる安全な認証モジュールです。パスワードリセット、新規ユーザー登録、パスワードとユーザー名の忘れた場合のウィジェットなどの機能を備えたStreamlit-Authenticatorは、アプリが安全で認可されたユーザーのみにアクセス可能であることを保証します。ただし、この技術は一定のセキュリティをもたらしますが、適切なSSOプロバイダとの認証とは比較になりません。

TableauのようなUIをStreamlitアプリに簡単に組み込むことができる、素晴らしいデータ分析・データ可視化ツールを知っていますか?

PyGWalker (opens in a new tab)は、TableauのようなUIを自分自身のStreamlitアプリに簡単に組み込むのに役立つPythonライブラリです。 Coding is FunのSven (opens in a new tab)による素晴らしいビデオをチェックして、このパワフルなデータ可視化Pythonライブラリを使用してStreamlitアプリを強化するための詳細な手順を見てみましょう!


Svenと彼の素晴らしい貢献 (opens in a new tab)に感謝!

さらに、PyGWalkerのGitHubページ (opens in a new tab)でPyGWalkerのさらなる例をチェックすることもできます。

Streamlit-Authenticatorのインストールとセットアップ

Streamlit-Authenticatorは、Streamlitアプリケーションに簡単に統合できる強力なツールです。ただし、使用する前にインストールとセットアップを行う必要があります。このプロセスは簡単で、いくつかのステップで完了できます。

Streamlit-Authenticatorのインストール方法

Streamlit-Authenticatorのインストールは、ターミナルでpip installコマンドを実行するだけで簡単です。以下に、インストール方法を示します:

pip install streamlit-authenticator

このコマンドは、Pythonパッケージインデックス(PyPI)からStreamlit-Authenticatorをダウンロードしてインストールするようにpip(Pythonパッケージインストーラ)に指示します。インストールが完了すると、Streamlit-Authenticatorを他のPythonパッケージと同様にStreamlitアプリでインポートすることができます。

Streamlit-Authenticatorのセットアップ

Streamlit-Authenticatorをインストールした後は、次のステップはセットアップです。これには、Streamlit-Authenticatorを特定のStreamlitアプリケーションと連携させるための設定が含まれます。以下に、その手順をステップバイステップで説明します:

  1. StreamlitアプリでStreamlit-Authenticatorをインポートします:
import streamlit_authenticator as sa
  1. アプリの特定の設定でStreamlit-Authenticatorを初期化します:
auth = sa.Authenticator(
    SECRET_KEY,
    token_url="/token",
    token_ttl=3600,
    password_hashing_method=sa.PasswordHashingMethod.BCRYPT,
)
  1. auth.login_requiredデコレータを使用して、Streamlitのルートを保護します:
@auth.login_required
def protected():
    st.write("This is a protected route.")

Streamlitでのユーザー認証の実装 with Streamlit-Authenticator

Streamlit-Authenticatorをインストールしてセットアップしたので、Streamlitアプリにユーザー認証サービスを追加する時間です。これには、ログインフォームの作成、ユーザーセッションの処理などが含まれます。

Streamlitにユーザー認証サービスを追加

Streamlitにユーザー認証サービスを追加するには、ユーザーが認証情報を入力できるログインフォームを作成する必要があります。以下は、Streamlit-Authenticatorを使用してこれを行う方法の例です:

@st.route("/login")
def login():
    username = st.text_input("ユーザー名")
    password = st.text_input("パスワード", type="password")
 
    if st.button("ログイン"):
        user = auth.authenticate(username, password)
        if user is not None:
            auth.login_user(user)
            st.success("ログインに成功しました。")
        else:
            st.error("無効なユーザー名またはパスワードです。")

SSOなしでのユーザー認証の実装

シングルサインオン(SSO)を実装できない場合でも心配ありません。Streamlit-Authenticatorを使用すると、SSOなしでStreamlitアプリに基本的な認証を追加できます。これには、すべてのユーザー間で共有されるグローバルなパスワードを作成する必要があります。以下にその方法を示します:

## .streamlit/secrets.toml
password = "streamlit123"

そして、Streamlitアプリでは、入力されたパスワードを保存されたパスワードと照合することができます:

password = st.text_input("パスワード", type="password")
 
if password == st.secrets["password"]:
    st.success("アクセスが許可されました。")
else:
    st.error("アクセスが拒否されました。")

Streamlitのシークレット管理の理解

Streamlitのシークレット管理機能は、ユーザー認証において重要な役割を果たしています。これにより、パスワードやAPIキーなどの機密情報をコードの外部に安全に保存することができます。これにより、Streamlitアプリのセキュリティとユーザーのプライバシーを維持するのに不可欠です。

先ほどの誤解についてはお詫び申し上げます。各セクションを詳細に、例や事実を交えてさらに掘り下げていきましょう。

Streamlit-Authenticatorの高度な機能

Streamlit-Authenticatorは、基本的なユーザー認証に関する機能だけではありません。Streamlitアプリでのユーザー管理に包括的な解決策を提供する数多くの高度な機能が搭載されています。これらの機能には、パスワードリセット、新規ユーザー登録、パスワードやユーザー名を忘れた場合の処理などを行うためのウィジェットが含まれています。それぞれの機能を詳細に見ていきましょう。

パスワードリセットウィジェットの作成

Streamlit-Authenticatorのキーとなる機能の1つは、パスワードリセットウィジェットの作成能力です。これは、ユーザー認証を扱うすべてのアプリケーションにとって重要な機能です。以下は、Streamlit-Authenticatorを使用してパスワードリセットウィジェットを作成する手順のガイドです。

  1. まず、Streamlitアプリ内にパスワードリセットフォームのための新しいルートを作成します。
@st.route("/password-reset")
def password_reset():
    ...
  1. このルートの中で、ユーザーがメールアドレスを入力できるフォームを作成します。
email = st.text_input("メールアドレスを入力してください")
if st.button("パスワードをリセット"):
    ...
  1. ユーザーがフォームを送信すると、Streamlit-Authenticatorを使用してパスワードリセットリンクを生成します。
reset_link = auth.generate_password_reset_link(email)
  1. 最後に、このリンクをユーザーのメールアドレスに送信します。Pythonの任意のメールライブラリ(smtplibやyagmailなど)を使用できます。

新規ユーザー登録ウィジェットの作成

Streamlit-Authenticatorを使用すると、Streamlitアプリに新規ユーザー登録ウィジェットを簡単に追加することができます。このウィジェットを使用すると、新規ユーザーは希望のユーザー名とパスワードを入力してアカウントを作成することができます。以下は、Streamlit-Authenticatorを使用して新規ユーザー登録ウィジェットを作成する方法です。

  1. Streamlitアプリ内に登録フォームのための新しいルートを作成します。
@st.route("/register")
def register():
    ...
  1. このルートの中で、ユーザーが希望のユーザー名とパスワードを入力できるフォームを作成します。
username = st.text_input("ユーザー名を選択してください")
password = st.text_input("パスワードを選択してください", type="password")
if st.button("登録"):
    ...
  1. ユーザーがフォームを送信すると、Streamlit-Authenticatorを使用して入力された認証情報を持つ新しいユーザーアカウントを作成します。
user = auth.create_user(username, password)
st.success("アカウントが正常に作成されました。")

パスワード忘れウィジェットの作成

ユーザーがパスワードを忘れた場合、パスワード忘れウィジェットは非常に便利です。このウィジェットを使用すると、ユーザーはメールアドレスを入力してパスワードをリセットすることができます。以下は、Streamlit-Authenticatorを使用してパスワード忘れウィジェットを作成する方法です。

  1. Streamlitアプリ内にパスワード忘れフォームのための新しいルートを作成します。
@st.route("/forgot-password")
def forgot_password():
    ...
  1. このルートの中で、ユーザーがメールアドレスを入力できるフォームを作成します。
email = st.text_input("メールアドレスを入力してください")
if st.button("パスワードをリセット"):
    ...
  1. ユーザーがフォームを送信すると、Streamlit-Authenticatorを使用してパスワードリセットリンクを生成し、ユーザーのメールアドレスに送信します。

ユーザー名忘れウィジェットの作成

パスワードを忘れた場合と同様に、ユーザー名を忘れた場合にもユーザー名を取得するためのウィジェットが役立ちます。このウィジェットを使用すると、ユーザーはメールアドレスを入力してユーザー名を取得することができます。以下は、Streamlit-Authenticatorを使用してユーザー名忘れウィジェットを作成する方法です。

  1. Streamlitアプリ内にユーザー名忘れフォームのための新しいルートを作成します。
@st.route("/forgot-username")
def forgot_username():
    ...
  1. このルートの中で、ユーザーがメールアドレスを入力できるフォームを作成します。
email = st.text_input("メールアドレスを入力してください")
if st.button("ユーザー名を取得"):
    ...
  1. ユーザーがフォームを送信すると、Streamlit-Authenticatorを使用してユーザーのユーザー名を取得し、ユーザーのメールアドレスに送信します。
username = auth.get_username(email)
st.success(f"あなたのユーザー名は {username} です。")

これらのStreamlit-Authenticatorの高度な機能により、Streamlitアプリでのユーザー認証が包括的な解決策となります。これらの機能を使用することで、アプリは安全だけでなくユーザーフレンドリーになることができます。

Streamlit-Authenticator:基本的な認証を超えて

Streamlit-Authenticatorは、ユーザー認証に対する堅牢な解決策を提供するだけでなく、ユーザーエクスペリエンスを向上させ、ユーザー管理を効率化するさまざまな追加機能も提供しています。ユーザーロールとパーミッション、マルチファクタ認証、およびサードパーティの認証プロバイダとの統合などの機能により、Streamlitアプリに追加のセキュリティと柔軟性をもたらすことができます。

  • ユーザーロールとパーミッション:Streamlit-Authenticatorは、ユーザーロールとパーミッションをサポートしており、各ユーザーがアプリ内で何ができるか、できないかを制御することができます。たとえば、管理者、編集者、閲覧者などの役割を作成し、それぞれに異なる権限を割り当てることができます。これは、さまざまなユーザータイプが異なるニーズと責任を持つアプリケーションに特に役立ちます。

  • マルチファクタ認証:追加のセキュリティを提供するために、Streamlit-Authenticatorはマルチファクタ認証(MFA)もサポートしています。MFAでは、ユーザーは2つ以上の証拠(またはファクタ)を提供する必要があります。これらのファクタには、何かを知っているもの(パスワードなど)、何かを持っているもの(物理的なトークンやスマートフォンなど)、何かであるもの(指紋や他の生体認証データなど)が含まれます。

  • サードパーティの認証プロバイダとの統合: Streamlit-Authenticatorは、Google、Facebook、Twitterなどのサードパーティの認証プロバイダとも統合することができます。これにより、ユーザーはこれらのプラットフォーム上の既存のアカウントを使用してアプリにログインすることができ、ログインプロセスがより迅速で便利になります。

結論

Streamlit-Authenticatorは、Streamlitアプリでのユーザー認証の包括的なソリューションを提供します。ログインや登録などの基本的な認証機能から、パスワードリセット、ユーザーロールと権限、多要素認証、サードパーティのプロバイダとの統合などの高度な機能まで、Secure-Authenticatorにはアプリを安全に保護し、スムーズなユーザーエクスペリエンスを提供するために必要なすべてが備わっています。

ただし、Streamlit-Authenticatorは強力なツールである一方で、欠点もあります。例えば、銀行や医療アプリなど、高いセキュリティレベルが必要なアプリには適していない場合があります。また、比較的簡単に設定できる一方で、Pythonとウェブ開発の知識がいくつか必要です。

これらの潜在的な欠点にもかかわらず、Streamlit-Authenticatorは、使いやすさ、柔軟性、堅牢な機能セットから、Streamlitアプリでのユーザー認証において人気の選択肢です。

StreamlitアプリをTableauのようなデータ分析・データ可視化ツールに変える素晴らしいツール、PyGWalker (opens in a new tab) は、簡単に独自のStreamlitアプリにTableauのようなUIを組み込むことができるPythonライブラリです。

PyGWalkerによるStreamlitでのデータ可視化 (opens in a new tab)

よくある質問

Q: Streamlitを認証するにはどうすればいいですか?

A: Streamlitを認証するには、Streamlit-Authenticatorを使用します。これは、Streamlitアプリケーションでユーザーの資格情報を検証するための安全な認証モジュールであり、パスワードリセット、新しいユーザー登録、忘れたパスワードとユーザー名のウィジェットなどの機能を提供します。

Q: Streamlitにユーザー認証を追加するにはどうすればいいですか?

A: Streamlitにユーザー認証を追加するには、Streamlit-Authenticatorをインストールして設定します。設定が完了すると、ログインや登録フォームの作成、ユーザーセッションの管理などに使用することができます。

Q: Streamlit Authenticatorとは何ですか?

A: Streamlit-Authenticatorは、Streamlitアプリケーション向けの安全な認証モジュールです。ユーザーの資格情報を検証したり、ユーザーセッションを管理したり、パスワードリセット、新しいユーザー登録、パスワードとユーザー名のウィジェットを提供するなどの機能を提供します。

Q: Streamlitの欠点は何ですか?

A: Streamlitはデータアプリを作成するための強力なツールですが、いくつかの欠点があります。例えば、銀行や医療アプリなど、高いセキュリティレベルが必要なアプリには適していない場合があります。また、比較的簡単に設定できる一方で、Pythonとウェブ開発の知識がいくつか必要です。