Skip to main content

AI を使って Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使えば、agent skills を利用して、数分で Auth0 API Authentication を自動的に追加できます。インストール:
次に、AI アシスタントに次のように依頼します:
AI アシスタントが、Auth0 API の作成、資格情報の取得、@auth0/auth0-fastify-api のインストール、プラグインの設定、JWT バリデーションによる API エンドポイントの保護まで自動的に行います。agent skills の完全なドキュメント →
前提条件: 開始する前に、次のものがインストールされていることを確認してください。
  • Node.js 20 LTS 以降
  • npm 10 以降、または yarn 1.22 以降、または pnpm 8 以降
インストールの確認: node --version && npm --versionFastify のバージョン互換性: この クイックスタート は Fastify 5.x 以降で動作します。

はじめに

このクイックスタートでは、JWT アクセストークンを使って Fastify の API エンドポイントを保護する方法を紹介します。Auth0 アクセストークンを検証し、保護されたリソースへのアクセスを許可する安全な API を構築します。
1

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

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

Auth0 Fastify API SDKをインストールする

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

Auth0 API の設定

次に、Auth0 テナントに新しい API を作成し、環境変数をプロジェクトに追加する必要があります。Auth0 API の設定方法は 2 つあります。CLI コマンドを使う方法と、Auth0 Dashboard で手動で設定する方法です。
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。
作成後、IdentifierDomain の値をコピーして、.env ファイルを作成します。
.env
このコマンドでは次のことが行われます。
  1. 認証済みかどうかを確認します (必要に応じてログインを求めます)
  2. 指定した identifier で Auth0 API を作成します
  3. domain と identifier を含む API の詳細を表示します
.env ファイルが存在することを確認します: cat .env (Mac/Linux) または type .env (Windows)
4

Auth0 APIプラグインを設定する

Fastifyサーバーを作成し、Auth0 API プラグインを登録します:
server.js
この設定でできること:
  • Auth0 APIプラグインを、Auth0 domain と API audience を使って登録します
  • 受信リクエストに対する JWT のバリデーションを設定します
  • ルートを保護するための requireAuth() preHandler を利用できるようにします
5

APIルートを作成する

server.js に公開ルートと保護ルートを追加します:
server.js
重要なポイント:
  • 公開ルートでは認証は不要です
  • 保護されたルートでは、有効な JWT を必須にするために preHandler: fastify.requireAuth() を使用します
  • request.user には、認証済みリクエストのデコード済み JWT クレームが含まれます
  • sub クレームには、ユーザーの一意の識別子が含まれます
6

APIを動かす

開発サーバーを起動します:
API は現在、http://localhost:3001 で動作しています。
Node.js 20+ の --watch フラグを使うと、ファイルが変更されたときにサーバーが自動的に再起動します。
7

APIを試す

パブリックエンドポイントをテストします (認証は不要です) :
次のように表示されます:
トークンなしで保護されたエンドポイントをテストします (失敗するはずです) :
401 Unauthorized エラーが表示されます:
有効な token でテストするには、次の手順を行います。
  1. ユーザーを認証するクライアントアプリケーション (Web またはモバイルアプリ) を作成します
  2. クライアントが API 用の access token を request するように設定します (audience パラメーターを使用)
  3. その access token を Authorization header で使用します
token を使用する例:
チェックポイントこれで、保護された API が用意できているはずです。API は次のように動作します。
  1. 認証なしで公開エンドポイントへのリクエストを受け付ける
  2. 有効なトークンなしで保護されたエンドポイントへのリクエストを拒否する
  3. JWT トークンを Auth0 ドメインと audience に対して検証する
  4. トークンのクレームから request.user 経由でユーザー情報を提供する

高度な使い方

Token インターフェースを拡張して、アクセストークン内のカスタムクレームに型安全性を持たせることができます。
server.ts
これで、TypeScript がカスタムクレームを認識するようになります。
server.ts
カスタムクレームは、標準の OIDC クレームでない限り、名前空間付き URL (例: https://myapp.com/roles) を使用する必要があります。カスタムクレームの詳細をご覧ください。
アクセストークン内の特定の権限を確認します。
server.js
権限は Auth0 API の設定で構成し、クライアントに付与する必要があります。API 権限の詳細をご覧ください。
カスタムクレームを使用して、ロールベースのアクセス制御を実装します。
server.js
ロールは Auth0 Actions を使用してトークンに追加する必要があります。トークンにロールを追加する方法はこちら
Web アプリケーションからのリクエストを許可するには、CORS を有効にします。
server.js
本番環境では、明示的にオリジンを指定します。
server.js
認証エラーに対応する包括的なエラーハンドリングを追加します。
server.js
レート制限を使って、APIを不正利用から保護できます。
server.js

トラブルシューティング

「認可トークンが見つかりませんでした」

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

「無効なトークン」または「jwt malformed」

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

「無効な署名」

問題: トークンの署名が一致しません。解決策:
  1. AUTH0_DOMAIN がトークンを発行したドメインと一致していることを確認します
  2. RS256 署名アルゴリズム (デフォルト) を使用していることを確認します
  3. トークンが改変されていないことを確認します

「無効なaudience」

問題: トークンの audience が API と一致しません。解決策: クライアントアプリケーションは、正しい audience を指定してトークンをリクエストする必要があります:

ブラウザでの CORS エラー

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

次のステップ

保護されたAPIを用意できたので、次の項目もあわせて確認してみてください。

リソース