Skip to main content
@auth0/auth0-express-api SDK を使用するこの クイックスタート の新しい Beta バージョンが利用可能です。まもなくこのガイドに取って代わります。Beta クイックスタート を試す →

AI を使って Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI coding assistant を使っている場合は、Agent Skills を利用して、数分で Auth0 API のauthenticationを自動的に追加できます。インストール:
次に、AI アシスタントに次のように依頼します。
AI アシスタントが、Auth0 API の作成、資格情報の取得、express-oauth2-jwt-bearer のインストール、JWT ミドルウェアの設定、トークンの検証による API エンドポイントの保護を自動的に行います。Agent Skills の完全なドキュメント →
前提条件: 開始する前に、以下がインストールされていることを確認してください。
  • Node.js 18 LTS 以降 (^18.12.0 || ^20.2.0 || ^22.1.0 || ^24.0.0 をサポート)
  • npm 8 以降、yarn 1.22 以降、または pnpm 8 以降
インストールの確認: node --version && npm --versionExpress のバージョン互換性: この クイックスタート は Express 4.xExpress 5.x に対応しています。

始めましょう

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

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

Express API用に新しいディレクトリを作成し、Node.jsプロジェクトを初期化します。
プロジェクトを初期化する
プロジェクト構成を作成する
2

express-oauth2-jwt-bearer SDKをインストールする

必要な依存パッケージをインストールする
package.json に start スクリプトを追加します:
package.json
3

Auth0 API の設定

次に、Auth0 テナントに新しい API を作成し、環境変数をプロジェクトに追加します。Auth0 API の設定方法は 2 つあります。CLI コマンドを使う方法と、Auth0 Dashboard で手動設定する方法です。
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。
このコマンドでは次の処理が行われます。
  1. 認証済みかどうかを確認し、必要に応じてログインを求めます
  2. 指定した identifier で Auth0 API を作成します
  3. ドメインや identifier を含む API の詳細を表示します
作成後、IdentifierDomain の値をコピーし、.env ファイルを作成します。
.env
YOUR_AUTH0_DOMAIN は Auth0 テナントのドメイン (例: dev-abc123.us.auth0.com) に、YOUR_API_IDENTIFIER は API 識別子 (例: https://my-express-api.example.com) に置き換えてください。
.env ファイルが存在することを確認します: cat .env (Mac/Linux) または type .env (Windows)
4

JWT ミドルウェアを設定する

Express サーバーを作成し、JWT バリデーションを設定します:
server.js
これでできること:
  • Auth0ドメインと API audience を使って JWT バリデーション用のミドルウェアを作成します
  • 受信したアクセストークンの iss クレームと aud クレームを検証します
  • 個々のルートを保護するために checkJwt を利用できるようにします
5

API ルートを作成する

server.js に公開ルートと保護ルートを追加します:
server.js
要点:
  • Public routes では認証は不要です
  • Protected routes では、有効な JWT を必須にするために checkJwt ミドルウェアを使用します
  • Scoped routes では、トークン内の特定の権限を必須にするために requiredScopes() を使用します
  • req.auth.payload には、認証済みリクエストのデコードされた JWT クレームが含まれます
  • sub クレームには、ユーザーの一意の識別子が含まれます
6

APIを実行する

開発サーバーを起動します:
API は現在、http://localhost:3001 で実行されています。
Node.js 18以降では、--watch フラグにより、ファイルが変更されるとサーバーが自動的に再起動されます。
7

APIを試す

認証不要の公開エンドポイントをテストします:
次のように表示されます:
トークンなしで保護されたendpointをテストします (失敗するはずです) :
401 Unauthorized エラーが表示されるはずです:
有効なトークンでテストするには:
  1. Auth0 DashboardアプリケーションAPIs に移動します
  2. API を選択して → Test タブを開きます
  3. 生成された access token をコピーします
保護されたエンドポイントをテストします:
次のように表示されます:
チェックポイントこれで保護された API ができているはずです。この API は次のようになっています。
  1. 公開エンドポイントへのリクエストを認証なしで受け付ける
  2. 有効なトークンがない場合、保護されたエンドポイントへのリクエストを拒否する
  3. JWT トークンを Auth0 ドメインと audience に照らして検証する
  4. req.auth.payload を通じて、トークンのクレームからユーザー情報を取得できる

高度な使用法

スコープを使用すると、きめ細かなアクセス制御を行えます。エンドポイントごとに必要なスコープを設定できます。Auth0 でスコープを設定する:
  1. Auth0 DashboardアプリケーションAPIs → 対象の API の順に移動します
  2. Permissions タブを開きます
  3. read:messageswrite:messagesadmin:access などの permission を追加します
スコープでルートを保護する:
server.js
リクエストに必要な scope が含まれていない場合、API は insufficient_scope エラーとともに 403 Forbidden を返します。access token の取得時に、クライアントアプリケーションが正しいスコープを request していることを確認してください。
スコープに加えて、JWT ペイロード内のカスタムクレームも検証できます。
server.js
カスタムクレームは、標準の OIDC クレームでない限り、名前空間付き URL (例: https://myapp.com/roles) を使用する必要があります。カスタムクレームの詳細についてはこちら
同じルートで、認証済みアクセスと匿名アクセスの両方を許可できます。
server.js
Web アプリケーションからのリクエストを許可するには、CORS を有効にします。
server.js
本番環境では、許可するオリジンを明示的に指定します。
server.js
認証エラーに対する包括的なエラー処理を追加します。
server.js
TypeScript プロジェクトでは、型定義をインストールしてプロジェクトを設定します。
server.ts を作成します。
server.ts
tsconfig.json を追加します。
tsconfig.json
次のコマンドで実行します: npx ts-node server.ts

トラブルシューティング

「No authorization token was found」

問題: API がリクエスト内でアクセストークンを見つけられません。解決方法:
  1. Authorization ヘッダーが存在することを確認します: Authorization: Bearer YOUR_TOKEN
  2. トークンの前に “Bearer” が含まれていることを確認します
  3. トークンの有効期限が切れていないことを確認します

「Invalid token」または「jwt malformed」

問題: トークンの形式が無効です。解決方法:
  1. アクセストークンを使用しており、ID トークンではないことを確認します
  2. トークンは API の audience パラメーターを指定して取得する必要があります
  3. トークンが有効な JWT であることを確認します (ドットで区切られた 3 つの部分があるはずです)

予期しない「iss」または「aud」の値

問題: トークン内の発行者または audience が設定と一致していません。解決方法:
  1. jwt.io でトークンをデコードします
  2. iss クレームが https://YOUR_AUTH0_DOMAIN/ と一致することを確認します (末尾のスラッシュに注意)
  3. aud クレームが AUTH0_AUDIENCE と完全に一致することを確認します
  4. .env の値を確認します:

「You must provide an issuerBaseURL」または「audience is required」

問題: 環境変数が読み込まれていません。解決方法:
  1. プロジェクトのルートに .env ファイルが存在することを確認します
  2. dotenv がインストールされていることを確認します: npm install dotenv
  3. サーバーファイルの先頭に require('dotenv').config() を追加します
  4. 変数名が完全に一致していることを確認します (大文字と小文字は区別されます)

すべてのリクエストで 401 Unauthorized が発生する

考えられる原因:
  • トークンの有効期限が切れている
  • audience が一致していない
  • 発行者が一致していない
デバッグ手順:
  1. jwt.io でトークンをデコードします
  2. exp クレームの期限が過ぎていないことを確認します
  3. aud クレームが AUTH0_AUDIENCE と完全に一致することを確認します
  4. iss クレームが https://{AUTH0_DOMAIN}/ であることを確認します
  5. Authorization ヘッダーの形式が Bearer YOUR_TOKEN であることを確認します (スペースあり)

「insufficient_scope」を伴う 403 Forbidden

問題: トークンに必要なスコープがありません。解決方法:
  1. スコープが Auth0 API に定義されていることを確認します (Auth0 Dashboard → アプリケーションAPIsPermissions)
  2. トークンを取得するときに必要なスコープをリクエストします
  3. トークンの scope クレームに必要なスコープが含まれていることを確認します

ブラウザーでの CORS エラー

問題: CORS ポリシーにより、ブラウザーが API リクエストをブロックしています。解決方法: cors をインストールして設定します:

次のステップ

保護された API を用意できたら、次の内容もぜひ確認してみてください。

リソース