AI を使って Auth0 を統合する
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 の完全なドキュメント →はじめに
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 で手動で設定する方法です。
- CLI
- Dashboard
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。作成後、Identifier と Domain の値をコピーして、
.env ファイルを作成します。.env
このコマンドでは次のことが行われます。
- 認証済みかどうかを確認します (必要に応じてログインを求めます)
- 指定した identifier で Auth0 API を作成します
- domain と identifier を含む API の詳細を表示します
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 でテストするには、次の手順を行います。
- ユーザーを認証するクライアントアプリケーション (Web またはモバイルアプリ) を作成します
- クライアントが API 用の access token を request するように設定します (audience パラメーターを使用)
- その access token を Authorization header で使用します
チェックポイントこれで、保護された API が用意できているはずです。API は次のように動作します。
- 認証なしで公開エンドポイントへのリクエストを受け付ける
- 有効なトークンなしで保護されたエンドポイントへのリクエストを拒否する
- JWT トークンを Auth0 ドメインと audience に対して検証する
- トークンのクレームから
request.user経由でユーザー情報を提供する
高度な使い方
TypeScriptでカスタムトークンのクレームを扱う
TypeScriptでカスタムトークンのクレームを扱う
Token インターフェースを拡張して、アクセストークン内のカスタムクレームに型安全性を持たせることができます。これで、TypeScript がカスタムクレームを認識するようになります。
server.ts
server.ts
カスタムクレームは、標準の OIDC クレームでない限り、名前空間付き URL (例:
https://myapp.com/roles) を使用する必要があります。カスタムクレームの詳細をご覧ください。権限ベースの認可
権限ベースの認可
ロールベースの認可
ロールベースの認可
カスタムクレームを使用して、ロールベースのアクセス制御を実装します。
server.js
ロールは Auth0 Actions を使用してトークンに追加する必要があります。トークンにロールを追加する方法はこちら。
CORS 設定
CORS 設定
Web アプリケーションからのリクエストを許可するには、CORS を有効にします。本番環境では、明示的にオリジンを指定します。
server.js
server.js
エラーハンドリング
エラーハンドリング
認証エラーに対応する包括的なエラーハンドリングを追加します。
server.js
レート制限
レート制限
レート制限を使って、APIを不正利用から保護できます。
server.js
トラブルシューティング
よくある問題と解決策
よくある問題と解決策
「認可トークンが見つかりませんでした」
問題: API がリクエスト内でアクセストークンを見つけられません。解決策:Authorizationヘッダーが存在することを確認します:Authorization: Bearer YOUR_TOKEN- トークンの前に
Bearerが含まれていることを確認します - トークンの有効期限が切れていないことを確認します
「無効なトークン」または「jwt malformed」
問題: トークンの形式が無効です。解決策:- アクセストークンを使用していることを確認します。ID トークンではありません
- トークンは API の
audienceパラメータを指定して取得する必要があります - トークンが有効な JWT であることを確認します (ドットで区切られた 3 つの部分がある必要があります)
「無効な署名」
問題: トークンの署名が一致しません。解決策:AUTH0_DOMAINがトークンを発行したドメインと一致していることを確認します- RS256 署名アルゴリズム (デフォルト) を使用していることを確認します
- トークンが改変されていないことを確認します
「無効なaudience」
問題: トークンの audience が API と一致しません。解決策: クライアントアプリケーションは、正しい audience を指定してトークンをリクエストする必要があります:ブラウザでの CORS エラー
問題: CORS ポリシーにより、ブラウザが API リクエストをブロックしています。解決策:@fastify/cors をインストールして設定します:次のステップ
- Fastify Web App クイックスタート - APIを呼び出すWeb アプリケーションを構築する
- ロールベースのアクセス制御 - きめ細かな権限を実装する
- API 認可のベストプラクティス - アクセストークンのベストプラクティスを学ぶ
- API を監視する - ログと監視を設定する
リソース
- auth0-fastify-api GitHub - ソースコードとサンプル
- Fastify Documentation - Fastify の詳細はこちら
- Auth0 API Authentication - アクセストークンについて理解する
- Auth0 Community - Community でサポートを受ける