AI を使用して Auth0 を統合する
AI を使用して Auth0 を統合する
Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使用している場合は、agent skills を使って数分で Auth0 API 認証を自動的に追加できます。インストール:次に、AI アシスタントに次のように依頼します。AI アシスタントは、Auth0 API の作成、認証情報の取得、
go-jwt-middleware のインストール、バリデーターの設定、JWT 検証による API エンドポイントの保護を自動的に行います。agent skills の完全なドキュメント →はじめに
net/http ライブラリと go-jwt-middleware v3 を使用します。
GitHub でサンプルを表示
テストを含む完全な動作例
新規プロジェクトを作成
Go API 用の新しいディレクトリを作成し、モジュールを初期化します。必要な依存パッケージをインストールします。プロジェクトの構成を作成します:
想定される go.mod を見る
想定される go.mod を見る
go.mod
Auth0 APIを設定する
次に、Auth0テナントに新しいAPIを作成し、環境変数をプロジェクトに追加する必要があります。Auth0 API の設定方法は 2 つあります。CLI コマンドを使うか、Auth0 Dashboard から手動で設定します。
- CLI
- Dashboard
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。作成後、Identifier と Domain の値をコピーし、
.env ファイルを作成します。このコマンドでは次の処理が行われます。
- 認証済みかどうかを確認し、必要に応じてログインを求めます
- 指定した Identifier で Auth0 API を作成します
- ドメインと Identifier を含む API の詳細を表示します
API の権限を定義する
Permissions (スコープ) を使用して、リソースへのアクセス方法を定義できます。たとえば、マネージャーには
read アクセスを付与し、管理者には write アクセスを付与します。- API の設定で、Permissions タブをクリックします
- 次の権限を作成します。
| Permission | Description |
|---|---|
read:messages | API からメッセージを読み取る |
このチュートリアルでは、スコープで保護されたエンドポイントを保護するために
read:messages スコープを使用します。アプリケーションの要件に応じて、追加の権限を定義できます。設定ローダーを作成
環境変数の読み込みと検証を行う設定パッケージを作成します。この処理で行うこと:
internal/config/auth.go
- 環境変数から Auth0 のドメインとオーディエンスを読み込みます
- 起動時に、必要な設定が揃っていることを検証します
- アプリケーション全体で使用できる型安全な設定構造体を返します
カスタムクレームとJWTバリデーターの作成
カスタムクレームを使用すると、JWT からアプリケーション固有のデータを抽出して検証できます。validator は、Auth0 に対してトークンを検証する中核コンポーネントです。重要なポイント:
- claims.go
- validator.go
internal/auth/claims.go
Validateメソッドは、JWT の解析後にミドルウェアによって自動的に呼び出されますHasScopeは、権限ベースのアクセス制御のためにスペース区切りのスコープを解析します- validator は JWKS キャッシュ (TTL 5 分) を使用し、30 秒のクロックスキューを許容します
- RS256 アルゴリズムは、algorithm confusion attacks を防ぐために明示的に設定されています
HTTPミドルウェアとハンドラーを作成する
このミドルウェアは、HTTP リクエスト用バリデーターをラップします。ハンドラーでは、公開、非公開、スコープベースの 3 つの保護レベルを示しています。保護レベル:
- middleware.go
- api.go
internal/auth/middleware.go
- Public (
/api/public) — 認証は不要です - Private (
/api/private) — 有効な JWT が必要です - Scoped (
/api/private-scoped) — 有効な JWT とread:messages権限が必要です
API を実行してテストする
開発サーバーを起動します:次のように表示されます: 次のように表示されます:トークンなしでプライベートエンドポイントをテストします (失敗するはずです) :401 Unauthorized エラーが表示されます。有効なトークンでテストするには、Auth0 Dashboard で対象のAPIを開き、Test タブをクリックしてアクセストークンをコピーします。次に、以下を実行します。スコープが設定されたエンドポイントをテストします (
Server starting on :8080公開エンドポイントをテストします (認証不要) :read:messages 権限が必要です) :チェックポイントこれで、保護された Go API を用意できているはずです。API は次のように動作します。
- パブリックエンドポイントへのリクエストは、認証なしで受け入れる
- 保護されたエンドポイントへのリクエストは、有効なトークンがない場合は拒否する
- JWT を Auth0 のドメインとオーディエンスに照らして検証する
- スコープを使用して、権限ベースのアクセス制御を適用する
API の呼び出し
Authorization ヘッダーで Bearer トークンとしてアクセストークンを渡すことで、任意のアプリケーションから呼び出せます。
クライアントコードの例
クライアントコードの例
アクセストークンの取得
アクセストークンの取得
- シングルページアプリケーションまたはモバイルアプリ
- Machine-to-Machine (M2M)
シングルページアプリケーションまたはモバイル/ネイティブアプリケーションから API を呼び出す場合は、認可フローの完了後にアクセストークンを取得します。トークンの取得方法や API の呼び出し方法は、開発しているアプリケーションの種類や使用しているフレームワークによって異なります。
シングルページアプリケーション
React、Vue、Angular のクイックスタート (例付き)
モバイル / ネイティブアプリケーション
iOS、Android、React Native のクイックスタート
高度な使用方法
DPoP(所有証明)セキュリティ
DPoP(所有証明)セキュリティ
DPoP (Demonstrating Proof-of-Possession) は RFC 9449 で定義されており、トークンを暗号鍵にバインドすることでトークンの盗難を防ぎ、セキュリティを強化します。DPoP モード:
internal/auth/middleware.go
DPoPAllowed(デフォルト) — Bearer トークンと DPoP トークンの両方を受け入れますDPoPRequired— DPoP トークンのみを受け入れ、Bearer は拒否しますDPoPDisabled— Bearer トークンのみを受け入れ、DPoP は拒否します
DPoP は、金融 API、医療 API、高いセキュリティが求められるエンタープライズアプリケーションに推奨されます。詳しくは DPoP ドキュメントを参照してください。
CORS 設定
CORS 設定
Webアプリケーションからのリクエストを許可するには、CORS を有効にします。簡単なミドルウェアや、rs/cors のようなライブラリを使用できます。本番環境では、ワイルドカードではなく明示的なオリジンを指定してください。
cmd/server/main.go
slog による構造化ログ
slog による構造化ログ
トークン検証をデバッグするために、詳細なログを有効にします。起動時の確認を追加します。
internal/auth/middleware.go
cmd/server/main.go
トラブルシューティング
よくある問題と解決策
よくある問題と解決策
次のステップ
- ロールベースアクセス制御 — きめ細かな権限を実装する
- アクセストークンのベストプラクティス — トークンのセキュリティについて学ぶ
- API を監視する — ログ記録と監視を設定する
- 本番環境チェックリスト — リリース前のセキュリティレビューを行う
リソース
- go-jwt-middleware GitHub — ソースコード、サンプル、DPoP のサポート
- Go API Sample — 完全に動作するサンプル
- Auth0 Community — コミュニティからサポートを受ける