Skip to main content
前提条件: 始める前に、以下がインストールされていることを確認してください。
  • Python 3.9 以上
  • pip または Poetry パッケージマネージャー
  • jq - Auth0 CLI の設定に必要です
  • お好みのコードエディター
Flask のバージョン互換性: この Quickstart では、ネイティブの async サポートを利用するために Flask 3.0 以上が必要です。

はじめに

このガイドでは、Flask で構築した新規または既存の Python API に Auth0 を統合する方法を説明します。
1

Flask の新しいプロジェクトを作成する

Flask API 用に新しいディレクトリを作成します:
仮想環境を作成し、アクティベートします:
2

依存関係をインストール

以下の依存パッケージを記載した requirements.txt ファイルを作成します:
requirements.txt
依存関係をインストールします:
3

Auth0 API の設定

次に、Auth0 テナントに新しい API を作成し、アプリケーションを設定します。この作業は、CLI コマンドを実行して自動で行うことも、Auth0 Dashboard から手動で行うこともできます。
  1. Auth0 DashboardアプリケーションAPIs に移動します
  2. Create API をクリックします
  3. API の詳細を入力します。
    • Name: My Flask API
    • Identifier: https://my-flask-api (これが audience になります)
    • Signing Algorithm: RS256
  4. Create をクリックします
  5. Auth0 Dashboard で Domain をコピーします (アプリケーションアプリケーション[Your App]設定 にあります)
  6. 作成した Identifier をコピーします (これが audience です)
Domain には https:// を含めず、ドメイン名のみを使用してください (例: your-tenant.auth0.com) 。Audience (API 識別子) は API の一意の識別子で、有効な URI であれば任意の値を指定できます。
4

API権限を定義する

特定のリソースへのアクセスを制御するために、API の権限 (スコープ) を設定します。
  1. Auth0 Dashboard で、アプリケーションAPIs に移動します
  2. API (My Flask API) を選択します
  3. Permissions タブを開きます
  4. Add Permission をクリックします
  5. 次の権限を追加します。
    • Permission (Scope): read:messages
    • Description: Read messages
  6. Add をクリックします
Permissions では、その API に対して実行できる操作を定義します。write:messagesdelete:messages など、複数の権限を追加できます。この Quickstart の /api/private-scoped エンドポイントには、read:messages 権限が必要です。
5

Auth0 のクライアントを設定する

ステップ3でCLIの方法を使用した場合、.envファイルは自動的に作成されています。以下のapp.pyファイルの作成に進んでください。
Auth0 Dashboardの方法を使用した場合は、Auth0の設定を保存するため、プロジェクトのルートディレクトリに.envファイルを作成してください。
.env
your-tenant.us.auth0.com は実際の Auth0 ドメインに置き換え、API_IDENTIFIER はダッシュボードにある API 識別子に合わせて更新してください。
app.py ファイルを作成し、Auth0 API クライアントを設定します。
app.py
5

保護されたルートを作成

ルートを保護するデコレーターを追加し、公開エンドポイントと非公開エンドポイントを作成します:
app.py
6

APIを実行する

Flask アプリケーションを起動します。
これでAPIは http://localhost:5000 で実行中です。
チェックポイントこれで、3 つのエンドポイントを備えた Auth0 保護の Flask API が localhost 上で完全に動作しているはずです。
  • /api/public - 認証なしでアクセス可能
  • /api/private - 有効な Auth0 アクセストークンが必要
  • /api/private-scoped - 認証と read:messages 権限が必要

APIをテストする

保護されたエンドポイントをテストするには、アクセストークンが必要です。

テスト用トークンを取得する

  1. Auth0 Dashboardに移動します
  2. アプリケーション → APIs に移動します
  3. 使用するAPIを選択します
  4. Test タブを開きます
  5. アクセストークンをコピーします

リクエストを送信する

パブリックエンドポイント (トークン不要) をテストします:
保護されたエンドポイントをテストします (トークンが必要です) :
YOUR_ACCESS_TOKEN を Auth0 Dashboard からコピーしたトークンに置き換えます。

高度な使用方法

アクセストークンに特定のクレームが含まれていることを必須にします。
セキュリティをさらに強化するには、DPoP (Demonstrating Proof-of-Possession) を有効にします。DPoP は、アクセストークンを暗号キーに関連付けることで OAuth 2.0 を強化します。
verify_request() メソッドは、リクエストで Bearer 認証と DPoP 認証のどちらが使われているかを自動的に検出します。DPoP が使用されている場合は、RFC 9449 に従ってアクセストークンと DPoP proof の両方を検証します。
特定のスコープを確認するデコレーターを作成します。
具体的なエラー種別に対応した、包括的なエラー処理を実装します。
すべての認証エラーは BaseAuthError を継承しており、WWW-Authenticate ヘッダーを含む適切な HTTP レスポンスを返すために、get_status_code()get_headers()get_error_code() などのメソッドを提供します。
ほとんどのエンドポイントで認証が必要なアプリケーションでは、Flask の before_request を使ってトークンをグローバルに検証します。

よくある問題

症状: 有効そうに見えるトークンを使っていても 401 エラーが発生する原因: トークン内の audience が、API クライアントに設定した audience と一致していない解決策:
  1. .env ファイル内の AUTH0_AUDIENCE が Auth0 API 識別子 と完全に一致していることを確認する
  2. audience では大文字と小文字が区別される
  3. audience が URL または URN 形式になっていることを確認する (例: my-api ではなく https://my-api)
症状: 発行者が一致せず、トークンのバリデーションに失敗する原因: ドメインの設定がトークンの発行者と一致していない解決策:
  1. AUTH0_DOMAIN が正しいことを確認する (例: tenant.us.auth0.com)
  2. ドメインに https:// を含めない
  3. 末尾にスラッシュを付けない
症状: None の値や環境変数に関するエラーが発生する原因: 環境変数が読み込まれていない、または .env ファイルが見つからない解決策:
  1. .env ファイルがプロジェクトのルートに存在することを確認する
  2. os.getenv() を呼び出す前に load_dotenv() が実行されていることを確認する
  3. 変数名が完全に一致していることを確認する (大文字と小文字を区別)
症状: RuntimeError: This event loop is already running または同様の async エラーが発生する原因: Flask 3.0 以降を使わずに async のルートを使用している、または sync と async を不適切に混在させている解決策:
  1. Flask 3.0 以上にアップグレードする: pip install --upgrade flask
  2. api_client を使用するすべてのルートハンドラーが async def として宣言されていることを確認する
  3. ルートハンドラー内で asyncio.run() を使用しない
症状: VerifyAccessTokenError: Token is expired原因: アクセストークンの有効期限が切れている解決策:
  1. Auth0 Dashboard の Test タブから新しいトークンをリクエストする
  2. クライアントアプリケーションでトークンの更新を実装する
  3. Auth0 Dashboard のトークンは通常 24 時間有効
症状: Missing or invalid authorization header エラー原因: リクエストに Authorization ヘッダーが含まれていない、または形式が正しくない解決策:
  1. ヘッダー名が Authorization (A は大文字) であることを確認する
  2. 次の形式を使用する: Authorization: Bearer YOUR_TOKEN
  3. トークンを引用符で囲まない

追加リソース

SDKドキュメント

SDKの完全なドキュメントとAPIリファレンス

Flaskドキュメント

Flaskフレームワークの公式ドキュメント

Auth0 Dashboard

Auth0 テナントとAPIを管理

API認証ガイド

アクセストークンとAPIセキュリティについて詳しく見る

DPoPドキュメント

Proof-of-Possessionセキュリティについて詳しく見る

コミュニティフォーラム

Auth0 Communityでサポートを受ける

次のステップ

Flask を使った完全に動作するサンプルについては、Auth0 Python API samples repositoryをご覧ください。