はじめに
1
新しいプロジェクトを作成する
Express API 用の新しいディレクトリを作成し、Node.js プロジェクトを初期化します。
package.json を更新して ES モジュールを使用するようにし、start スクリプトを追加します。2
SDKをインストールする
@auth0/auth0-express-api、express、dotenv をインストールします。3
Auth0 API を設定する
Auth0 テナントに新しい API を作成し、環境変数を設定します。
- CLI
- Dashboard
プロジェクトのルートディレクトリで次のコマンドを実行して、Auth0 API を作成します。作成後、Identifier と Domain の値をコピーして、
.env ファイルを作成します。YOUR_API_IDENTIFIER を、上記で使用した API 識別子 (例: https://my-express-api.example.com) に置き換えます。4
JWT middleware を設定する
Express アプリケーションに この処理で行われること:
createAuth0Api() を登録して、JWT バリデーションを設定します。次に、パブリックルートと保護されたルートを追加します。server.js
createAuth0Api()は環境変数からAUTH0_DOMAINとAUTH0_AUDIENCEを自動的に読み取りますrequiresAuth()は各リクエストのAuthorization: Bearer <token>ヘッダーを検証しますreq.auth0.userには、認証済みリクエストのデコード済み JWT クレームが含まれます —subはユーザーの一意の識別子です
5
必要なscopeでrouteを保護する
有効なトークンに加えて、特定のスコープを必須にすることもできます。
requiresAuth() に scopes オプションを渡すと、トークンにそのスコープがない場合、SDK は 403 insufficient_scope を返します。server.js
6
API を実行する
7
API をテストする
公開エンドポイントをテストします (トークンは不要です) :想定される応答:保護されたエンドポイントを呼び出すには、アクセストークンが必要です。期待されるレスポンス:
- Auth0 Dashboard で アプリケーション > APIs に移動します
- API を選択し、Test タブを開きます
- 生成されたアクセストークンをコピーします
チェックポイントこれで API は保護されています。API は次のことを行います。
- トークンなしでパブリックエンドポイントへのリクエストを受け付ける
- 有効なアクセストークンが指定された場合に保護されたレスポンスを返す
- JWT を Auth0 ドメインと audience に照らして検証する
- デコードされたトークンのクレームを
req.auth0.userを通じて公開する
高度な使用方法
scopesInclude で複数のスコープを照合する
scopesInclude で複数のスコープを照合する
ルートで複数のスコープのいずれか 1 つを許可する場合や、複数のスコープをすべて必須にする場合は、
scopesInclude を使用します。デフォルトでは、指定したスコープのいずれかに一致します。すべてを必須にするには、{ match: 'all' } を渡します。スコープは配列またはスペース区切りの文字列で指定できます。以下の例では配列を使用しています。server.js
TypeScript でカスタムトークンクレームを定義する
TypeScript でカスタムトークンクレームを定義する
TypeScript を使用している場合は、型サポートをインストールします。
Token インターフェースを拡張することで、カスタムクレームに型安全にアクセスできます。server.ts
Web クライアント向けの CORS 設定
Web クライアント向けの CORS 設定
Web アプリケーションから API を呼び出せるよう、CORS を有効にします。本番環境では、ワイルドカードではなく、許可するオリジンを明示的に指定してください。
server.js
Auth0 Dashboard でスコープを設定する
Auth0 Dashboard でスコープを設定する
スコープベースの認可を使用するには、まず API にアクセス許可を定義します。
- Auth0 Dashboard → Applications > APIs → 対象の API に移動します
- Permissions タブに移動します
read:messages、write:messages、read:adminなどのアクセス許可を追加します- Save をクリックします
403 Forbidden を返します。トラブルシューティング
空の本文と 'WWW-Authenticate: Bearer' ヘッダーのみを伴う 401
空の本文と 'WWW-Authenticate: Bearer' ヘッダーのみを伴う 401
原因:
Authorization ヘッダーがないか形式が不正なため、bearer token を抽出できませんでした。RFC 6750 に従い、この場合 SDK は WWW-Authenticate: Bearer ヘッダーのみを含む 401 を返し、エラー本文は返しません。これは、存在するものの無効または期限切れの token とは異なります。後者の場合は、invalid_token エラーと JSON 本文を伴う 401 が返されます (以下を参照) 。修正:- ヘッダーが含まれていることを確認します:
Authorization: Bearer YOUR_TOKEN - token の前に「Bearer」 (大文字の B とスペース) があることを確認します
'Invalid token' または audience/発行者の不一致(401)
'Invalid token' または audience/発行者の不一致(401)
原因: token がこの API 向けに発行されていないか、ドメインまたは audience の値が一致していません。修正:
- jwt.io で token をデコードします
issがhttps://{yourDomain}/と一致することを確認します (末尾のスラッシュに注意)audがAUTH0_AUDIENCEと完全に一致することを確認します- ID トークンではなくアクセストークンを使用していることを確認します。アクセストークンは
audienceパラメータを指定して取得します
'Insufficient scope'(403)
'Insufficient scope'(403)
原因: token に必要な スコープ が含まれていません。修正:
- 必要な スコープ が Auth0 Dashboard の API の Permissions タブで定義されていることを確認します
- クライアントがアクセストークンを取得する際に スコープ をリクエストしていることを確認します
- jwt.io で token をデコードし、
scopeクレーム を確認します
環境変数が読み込まれない
環境変数が読み込まれない
原因:
dotenv が設定されていないか、変数名が間違っています。修正:import 'dotenv/config'がエントリーファイル内の最初のインポート文であることを確認します.envにAUTH0_DOMAINとAUTH0_AUDIENCEが含まれていることを確認します- デバッグ:
ESM のインポートエラー('Cannot use import statement')
ESM のインポートエラー('Cannot use import statement')
原因: または、サーバーファイルの名前を
@auth0/auth0-express-api SDK は ES モジュールを使用します。修正: package.json に "type": "module" を追加します。📁 package.jsonserver.mjs に変更します。次のステップ
- Express Web App に Login を追加する — Web アプリでのセッションベース認証に
@auth0/auth0-expressを使用する - ロールベースのアクセス制御 — きめ細かな権限を実装する
- Access Token のベストプラクティス — アクセストークン の取り扱いについて学ぶ
- API を監視する — ログ記録と監視を設定する
リソース
- auth0/auth0-express-api GitHub — ソースコードとサンプル
- Auth0 Community — コミュニティからサポートを受ける
- JWT.io — JWTをデバッグ・デコードする