@auth0/auth0-express-api SDK を使用するこの クイックスタート の新しい Beta バージョンが利用可能です。まもなくこのガイドに取って代わります。Beta クイックスタート を試す →AI を使って Auth0 を統合する
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 の完全なドキュメント →始めましょう
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 で手動設定する方法です。
- CLI
- Dashboard
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。作成後、Identifier と Domain の値をコピーし、
このコマンドでは次の処理が行われます。
- 認証済みかどうかを確認し、必要に応じてログインを求めます
- 指定した identifier で Auth0 API を作成します
- ドメインや identifier を含む API の詳細を表示します
.env ファイルを作成します。.env
YOUR_AUTH0_DOMAIN は Auth0 テナントのドメイン (例: dev-abc123.us.auth0.com) に、YOUR_API_IDENTIFIER は API 識別子 (例: https://my-express-api.example.com) に置き換えてください。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 エラーが表示されるはずです:有効なトークンでテストするには:次のように表示されます:
- Auth0 Dashboard → アプリケーション → APIs に移動します
- API を選択して → Test タブを開きます
- 生成された access token をコピーします
チェックポイントこれで保護された API ができているはずです。この API は次のようになっています。
- 公開エンドポイントへのリクエストを認証なしで受け付ける
- 有効なトークンがない場合、保護されたエンドポイントへのリクエストを拒否する
- JWT トークンを Auth0 ドメインと audience に照らして検証する
req.auth.payloadを通じて、トークンのクレームからユーザー情報を取得できる
高度な使用法
スコープベースの認可
スコープベースの認可
スコープを使用すると、きめ細かなアクセス制御を行えます。エンドポイントごとに必要なスコープを設定できます。Auth0 でスコープを設定する:
- Auth0 Dashboard で アプリケーション → APIs → 対象の API の順に移動します
- Permissions タブを開きます
read:messages、write:messages、admin:accessなどの permission を追加します
server.js
リクエストに必要な scope が含まれていない場合、API は
insufficient_scope エラーとともに 403 Forbidden を返します。access token の取得時に、クライアントアプリケーションが正しいスコープを request していることを確認してください。カスタムクレームのバリデーション
カスタムクレームのバリデーション
スコープに加えて、JWT ペイロード内のカスタムクレームも検証できます。
server.js
カスタムクレームは、標準の OIDC クレームでない限り、名前空間付き URL (例:
https://myapp.com/roles) を使用する必要があります。カスタムクレームの詳細についてはこちら。オプションの認証(公開 / 非公開ルートの混在)
オプションの認証(公開 / 非公開ルートの混在)
同じルートで、認証済みアクセスと匿名アクセスの両方を許可できます。
server.js
CORS 設定
CORS 設定
Web アプリケーションからのリクエストを許可するには、CORS を有効にします。本番環境では、許可するオリジンを明示的に指定します。
server.js
server.js
カスタムエラー処理
カスタムエラー処理
認証エラーに対する包括的なエラー処理を追加します。
server.js
TypeScript サポート
TypeScript サポート
TypeScript プロジェクトでは、型定義をインストールしてプロジェクトを設定します。次のコマンドで実行します:
server.ts を作成します。server.ts
tsconfig.json を追加します。tsconfig.json
npx ts-node server.tsトラブルシューティング
よくある問題と解決方法
よくある問題と解決方法
「No authorization token was found」
問題: API がリクエスト内でアクセストークンを見つけられません。解決方法:Authorizationヘッダーが存在することを確認します:Authorization: Bearer YOUR_TOKEN- トークンの前に “Bearer” が含まれていることを確認します
- トークンの有効期限が切れていないことを確認します
「Invalid token」または「jwt malformed」
問題: トークンの形式が無効です。解決方法:- アクセストークンを使用しており、ID トークンではないことを確認します
- トークンは API の
audienceパラメーターを指定して取得する必要があります - トークンが有効な JWT であることを確認します (ドットで区切られた 3 つの部分があるはずです)
予期しない「iss」または「aud」の値
問題: トークン内の発行者または audience が設定と一致していません。解決方法:- jwt.io でトークンをデコードします
issクレームがhttps://YOUR_AUTH0_DOMAIN/と一致することを確認します (末尾のスラッシュに注意)audクレームがAUTH0_AUDIENCEと完全に一致することを確認します.envの値を確認します:
「You must provide an issuerBaseURL」または「audience is required」
問題: 環境変数が読み込まれていません。解決方法:- プロジェクトのルートに
.envファイルが存在することを確認します dotenvがインストールされていることを確認します:npm install dotenv- サーバーファイルの先頭に
require('dotenv').config()を追加します - 変数名が完全に一致していることを確認します (大文字と小文字は区別されます)
すべてのリクエストで 401 Unauthorized が発生する
考えられる原因:- トークンの有効期限が切れている
- audience が一致していない
- 発行者が一致していない
- jwt.io でトークンをデコードします
expクレームの期限が過ぎていないことを確認しますaudクレームがAUTH0_AUDIENCEと完全に一致することを確認しますissクレームがhttps://{AUTH0_DOMAIN}/であることを確認しますAuthorizationヘッダーの形式がBearer YOUR_TOKENであることを確認します (スペースあり)
「insufficient_scope」を伴う 403 Forbidden
問題: トークンに必要なスコープがありません。解決方法:- スコープが Auth0 API に定義されていることを確認します (Auth0 Dashboard → アプリケーション → APIs → Permissions)
- トークンを取得するときに必要なスコープをリクエストします
- トークンの
scopeクレームに必要なスコープが含まれていることを確認します
ブラウザーでの CORS エラー
問題: CORS ポリシーにより、ブラウザーが API リクエストをブロックしています。解決方法:cors をインストールして設定します:次のステップ
- ロールベースのアクセス制御 - きめ細かな権限を実装する
- API 認可 Best Practices - アクセストークンのベストプラクティスについて学ぶ
- API を監視する - ログと監視を設定する
- Auth0 Community - コミュニティでサポートを受ける
リソース
- express-oauth2-jwt-bearer GitHub - ソースコードとサンプル
- Express.js Documentation - Express の詳細
- Auth0 API Authentication - アクセストークンについて理解する
- JWT.io - JWT のデバッグとデコード