Skip to main content
このQuickstartは現在Betaです。ぜひフィードバックをお寄せください!
前提条件: 始める前に、以下がインストールされていることを確認してください。

はじめに

このQuickstartでは、JWT アクセストークンを使用して Express.js API エンドポイントを保護する方法を説明します。Auth0 アクセストークンの検証、ルートの保護、スコープ と クレーム に基づく認可の実装を行う安全な API を構築します。
1

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

Express API 用の新しいディレクトリを作成し、Node.js プロジェクトを初期化します。package.json を更新して ES モジュールを使用するようにし、start スクリプトを追加します。
2

SDKをインストールする

@auth0/auth0-express-apiexpressdotenv をインストールします。
3

Auth0 API を設定する

Auth0 テナントに新しい API を作成し、環境変数を設定します。
プロジェクトのルートディレクトリで次のコマンドを実行して、Auth0 API を作成します。作成後、IdentifierDomain の値をコピーして、.env ファイルを作成します。YOUR_API_IDENTIFIER を、上記で使用した API 識別子 (例: https://my-express-api.example.com) に置き換えます。
4

JWT middleware を設定する

Express アプリケーションに createAuth0Api() を登録して、JWT バリデーションを設定します。次に、パブリックルートと保護されたルートを追加します。
server.js
この処理で行われること:
  • createAuth0Api() は環境変数から AUTH0_DOMAINAUTH0_AUDIENCE を自動的に読み取ります
  • requiresAuth() は各リクエストの Authorization: Bearer <token> ヘッダーを検証します
  • req.auth0.user には、認証済みリクエストのデコード済み JWT クレームが含まれます — sub はユーザーの一意の識別子です
5

必要なscopeでrouteを保護する

有効なトークンに加えて、特定のスコープを必須にすることもできます。requiresAuth()scopes オプションを渡すと、トークンにそのスコープがない場合、SDK は 403 insufficient_scope を返します。
server.js
API の Permissions タブでスコープを定義し (高度な使用方法を参照) 、アクセストークンの取得時にリクエストします。複数のスコープの照合やカスタムクレームに基づく認可には、SDK の scopesIncludeclaimEqualsclaimIncludesclaimCheck も使用できます。詳細は高度な使用方法を参照してください。
6

API を実行する

開発サーバーを起動します。
API は現在、http://localhost:3001 で起動しています。
7

API をテストする

公開エンドポイントをテストします (トークンは不要です) :
想定される応答:
保護されたエンドポイントを呼び出すには、アクセストークンが必要です。
  1. Auth0 Dashboardアプリケーション > APIs に移動します
  2. API を選択し、Test タブを開きます
  3. 生成されたアクセストークンをコピーします
保護されたエンドポイントをテストします。
期待されるレスポンス:
チェックポイントこれで API は保護されています。API は次のことを行います。
  1. トークンなしでパブリックエンドポイントへのリクエストを受け付ける
  2. 有効なアクセストークンが指定された場合に保護されたレスポンスを返す
  3. JWT を Auth0 ドメインと audience に照らして検証する
  4. デコードされたトークンのクレームを req.auth0.user を通じて公開する

高度な使用方法

ルートで複数のスコープのいずれか 1 つを許可する場合や、複数のスコープをすべて必須にする場合は、scopesInclude を使用します。デフォルトでは、指定したスコープのいずれかに一致します。すべてを必須にするには、{ match: 'all' } を渡します。スコープは配列またはスペース区切りの文字列で指定できます。以下の例では配列を使用しています。
server.js
認可が scope 以外のクレームに依存する場合は、claimEqualsclaimIncludes、または claimCheck を使用します。いずれも requiresAuth() の後に実行され、クレームの要件を満たさない場合は 401 invalid_token を返します。
server.js
TypeScript を使用している場合は、Token インターフェースを拡張することで、カスタムクレームに型安全にアクセスできます。
server.ts
型サポートをインストールします。
Web アプリケーションから API を呼び出せるよう、CORS を有効にします。
server.js
本番環境では、ワイルドカードではなく、許可するオリジンを明示的に指定してください。
スコープベースの認可を使用するには、まず API にアクセス許可を定義します。
  1. Auth0 DashboardApplications > APIs → 対象の API に移動します
  2. Permissions タブに移動します
  3. read:messageswrite:messagesread:admin などのアクセス許可を追加します
  4. Save をクリックします
次に、クライアントアプリケーションは アクセストークン を取得する際に、これらのスコープをリクエストする必要があります。トークンに必要なスコープが含まれていない場合、API は 403 Forbidden を返します。

トラブルシューティング

原因: Authorization ヘッダーがないか形式が不正なため、bearer token を抽出できませんでした。RFC 6750 に従い、この場合 SDK は WWW-Authenticate: Bearer ヘッダーのみを含む 401 を返し、エラー本文は返しません。これは、存在するものの無効または期限切れの token とは異なります。後者の場合は、invalid_token エラーと JSON 本文を伴う 401 が返されます (以下を参照) 。修正:
  1. ヘッダーが含まれていることを確認します: Authorization: Bearer YOUR_TOKEN
  2. token の前に「Bearer」 (大文字の B とスペース) があることを確認します
原因: token がこの API 向けに発行されていないか、ドメインまたは audience の値が一致していません。修正:
  1. jwt.io で token をデコードします
  2. isshttps://{yourDomain}/ と一致することを確認します (末尾のスラッシュに注意)
  3. audAUTH0_AUDIENCE と完全に一致することを確認します
  4. ID トークンではなくアクセストークンを使用していることを確認します。アクセストークンは audience パラメータを指定して取得します
原因: token に必要な スコープ が含まれていません。修正:
  1. 必要な スコープ が Auth0 Dashboard の API の Permissions タブで定義されていることを確認します
  2. クライアントがアクセストークンを取得する際に スコープ をリクエストしていることを確認します
  3. jwt.io で token をデコードし、scope クレーム を確認します
原因: dotenv が設定されていないか、変数名が間違っています。修正:
  1. import 'dotenv/config' がエントリーファイル内の最初のインポート文であることを確認します
  2. .envAUTH0_DOMAINAUTH0_AUDIENCE が含まれていることを確認します
  3. デバッグ:
原因: @auth0/auth0-express-api SDK は ES モジュールを使用します。修正: package.json"type": "module" を追加します。📁 package.json
または、サーバーファイルの名前を server.mjs に変更します。

次のステップ


リソース