Skip to main content
前提条件: 始める前に、次のものがインストールされていることを確認してください。
  • Python 3.9 以降
  • pip 20.0 以降
  • jq - Auth0 CLI のセットアップに必要です
Flask のバージョン互換性: このクイックスタートでは、非同期サポートのために [async] エクストラを含む Flask 2.0+ を使用します。

はじめに

このクイックスタートでは、FlaskアプリケーションにAuth0の認証を追加する方法を紹介します。Auth0 WebApp Python SDK を使用して、ログイン機能、保護されたルート、ユーザープロファイルへのアクセスを備えたセキュアなWebアプリケーションを構築します。
1

環境を整える

Flask プロジェクト用の新しいディレクトリを作成します:
仮想環境を作成します:
2

依存関係をインストール

依存関係を管理するために requirements.txt を作成します:
requirements.txt
requirements.txt ファイルには、プロジェクトで必要な依存関係がすべて記載されています。これらをインストールするには、次を実行します。
3

Auth0 Appを設定する

次に、Auth0 テナントで新しいアプリを作成し、プロジェクトに環境変数を追加します。CLIコマンドを実行して Auth0 アプリを自動的に設定する方法と、Auth0 Dashboardから手動で行う方法のいずれかを選択できます。
Auth0 アプリケーションを作成して .env ファイルを生成するには、プロジェクトのルートディレクトリで次のシェルコマンドを実行します。
このコマンドにより、次の処理が行われます。
  1. 認証済みかどうかを確認します (必要に応じてログインを求められます)
  2. http://localhost:5000 用に設定された Auth0 Regular Web Application を作成します
  3. AUTH0_DOMAINAUTH0_CLIENT_IDAUTH0_CLIENT_SECRETAUTH0_SECRETAUTH0_REDIRECT_URI を含む .env ファイルを生成します
4

Auth の設定、ルート、テンプレートを作成

ファイルを作成する
次のコードスニペットを追加します:
開発時のみ: この例では、説明用にシンプルなインメモリストレージクラス (MemoryStateStoreMemoryTransactionStore) を使用しています。これらのストアは、アプリケーションを再起動するとすべてのセッションデータが失われるため、マルチインスタンスのデプロイでは使用できません。本番環境のアプリケーションでは、永続ストレージを実装する必要があります。SDK は特定のフレームワークに依存しないため、カスタムの StateStoreTransactionStore を実装して提供する必要があります。Redis、PostgreSQL、その他の永続ストレージバックエンドの実装方法について詳しくは、公式 SDK のストレージ例を参照してください。
5

アプリを実行する

Flask の開発サーバーを起動します:
アプリは http://localhost:5000 で利用できます。Auth0 SDK が認証用のルートを自動的に処理します。
確認これで、localhost で Auth0 のログインページが問題なく動作するようになっているはずです。

高度な使い方

保護された API を呼び出す必要がある場合は、アクセストークンを取得します。
この機能を使用するには、次の設定が必要です。
  1. .env ファイルで AUTH0_AUDIENCE を設定する
  2. scopes に offline_access を含める (リフレッシュトークン用)
  3. auth.pyauthorization_params を更新する:

よくある問題

問題: アプリの起動時に “MissingRequiredArgumentError: secret” と表示される原因: AUTH0_SECRET 環境変数が設定されていないか、正しく読み込まれていません。解決策:
  1. .env ファイルがプロジェクトのルートにあることを確認します
  2. python-dotenv がインストールされていることを確認します: pip install python-dotenv
  3. 必要に応じて新しいシークレットを生成します: openssl rand -hex 64
  4. 生成したシークレットを .env に追加します: AUTH0_SECRET=your_generated_secret
  5. Flask アプリケーションを再起動します
問題: ログイン中に “Callback URL mismatch” または “invalid_request” エラーが表示される原因: コード内の Redirect URI が、Auth0 Dashboard に登録されているものと一致していません。解決策:
  1. .env ファイルを確認します: AUTH0_REDIRECT_URI=http://localhost:5000/callback
  2. Auth0 Dashboard → アプリケーション → 対象のアプリ → Settings に移動します
  3. http://localhost:5000/callbackAllowed Callback URLs に追加します
  4. Save Changes をクリックします
  5. Flask アプリケーションを再起動します
問題: “RuntimeError: This event loop is already running” または同様の非同期エラーが表示される原因: Flask 2.0+ の非同期サポートは、特定の構成では問題が発生することがあります。解決策:Flask を非同期サポート付きでインストールします:
次に、Flaskアプリケーションを再起動してください。
問題: “ModuleNotFoundError: No module named ‘auth0_server_python’” または同様のエラーが表示される原因: SDK がインストールされていないか、仮想環境が有効化されていません。解決策:
  1. 仮想環境が有効化されていることを確認します。
  2. SDK をインストールします。
  3. インストールを確認します。
問題: 認証中に “ClaimDecodingFailed” または “Failed to decode claims” エラーが表示される原因: Auth0 から受け取った ID トークンまたはアクセストークンを正常にデコードできていない可能性があります。よくある原因は次のとおりです。
  • 無効な JWT 形式
  • 破損したセッションデータ
  • 署名アルゴリズムの不一致
  • サーバーと Auth0 間の時刻のずれ
解決策:
  1. .env ファイル内の AUTH0_CLIENT_SECRET が正しいことを確認します
  2. システム時刻が同期されていることを確認します (NTP) :
  3. ブラウザーの Cookie を削除し、認証をやり直します
  4. AUTH0_DOMAINhttps:// プレフィックスが含まれていないことを確認します
  5. Auth0 Dashboard → アプリケーション → ご利用のアプリ → Settings → Advanced → OAuth → JsonWebToken Signature Algorithm が SDK の設定と一致していることを確認します
問題: “Token has expired” または “invalid_token” エラーが表示される原因: アクセストークンまたは ID トークンの有効期限が切れているか、セッションの有効期限が切れています。解決策:
  1. offline_access スコープを含めると、SDK が自動的にトークンを更新します:
  2. API の場合は、新しいトークンをリクエストするようにしてください:
  3. Auth0 Dashboard → アプリケーション → Your App → Settings → Advanced → OAuth でトークンの有効期間を調整します
  4. トークンの有効期限が切れたときにユーザーをログイン画面へリダイレクトできるよう、適切なエラー処理を実装します
問題: ブラウザのコンソールに CORS エラーまたは “Blocked by CORS policy” が表示される原因: Auth0 でアプリケーションのオリジンが正しく設定されていません。解決策:
  1. Auth0 Dashboard → アプリケーション → Your App → Settings でオリジンを追加します:
    • Allowed Web Origins: http://localhost:5000
    • Allowed Callback URLs: http://localhost:5000/callback
    • Allowed Logout URLs: http://localhost:5000
  2. 本番環境では、本番用の URL も追加します:
  3. フロントエンドの JavaScript から Auth0 API を呼び出す場合は、Flask アプリで CORS が適切に設定されていることを確認します:
問題: “Too many requests” または “Rate limit exceeded” というエラーが表示される原因: アプリケーションで認証リクエストに対する Auth0 のレート制限を超えています。解決策:
  1. Auth0 Dashboard → Monitoring → Logs でレート制限の詳細を確認します
  2. 再試行には指数バックオフを実装します:
  3. Auth0 サブスクリプションのプラン上限を確認します
  4. 不要なトークンリクエストを減らせるよう、認証フローを最適化します
  5. 頻繁に新しいトークンをリクエストするのではなく、適切にキャッシュします