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でサンプルを見る
テストを含む完全な動作例
1
新しいプロジェクトを作成
Go API用の新しいディレクトリを作成し、モジュールを初期化します。必要な依存関係をインストールしてください:プロジェクトの構成を作成します:
想定されるgo.modを表示
想定されるgo.modを表示
go.mod
2
Auth0 API の設定
次に、Auth0 テナントに新しい API を作成し、環境変数をプロジェクトに追加する必要があります。Auth0 API を設定する方法は 2 つあります。CLI コマンドを使う方法と、Auth0 Dashboard から手動で設定する方法です。
- CLI
- Dashboard
Auth0 API を作成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。作成後、Identifier と Domain の値をコピーして、
.env ファイルを作成します。このコマンドでは次の処理が行われます。
- 認証済みかどうかを確認します (必要に応じてログインを求められます)
- 指定した identifier で Auth0 API を作成します
- ドメインと identifier を含む API の詳細を表示します
3
API の権限を定義する
権限 (スコープ) を使うと、リソースへのアクセス方法を定義できます。たとえば、マネージャーには
read アクセスを、管理者には write アクセスを付与できます。- API の設定で、Permissions タブをクリックします
- 次の権限を作成します。
このチュートリアルでは、スコープが設定されたエンドポイントを保護するために
read:messages スコープを使用します。アプリケーションの要件に応じて、追加の権限を定義できます。4
設定ローダーを作成
環境変数を読み込んで検証するための設定パッケージを作成します。このコードでできること:
internal/config/auth.go
- 環境変数からAuth0のドメインとaudienceを読み込みます
- 起動時に、必要な設定がそろっていることを検証します
- アプリケーション全体で使える、型安全な設定用構造体を返します
5
カスタムクレームとJWTバリデーターの作成
カスタムクレームを使用すると、JWT からアプリケーション固有のデータを抽出して検証できます。バリデーターは、Auth0 を基準にトークンを検証する中核コンポーネントです。重要なポイント:
- claims.go
- validator.go
internal/auth/claims.go
Validateメソッドは、JWT の解析後にミドルウェアによって自動的に呼び出されますHasScopeは、スペース区切りのスコープを解析し、権限ベースのアクセス制御に使用します- バリデーターは JWKS のキャッシュ (TTL は 5 分) を使用し、30 秒のクロックスキューを許容します
- RS256 アルゴリズムは、algorithm confusion attacks を防ぐために明示的に設定されています
6
HTTPミドルウェアとハンドラーの作成
HTTP リクエストのバリデーターをラップするミドルウェアです。ハンドラーでは、public、private、permission-scoped の 3 つの保護レベルを示しています。保護レベル:
- middleware.go
- api.go
internal/auth/middleware.go
- Public (
/api/public) — 認証不要 - Private (
/api/private) — 有効な JWT が必要 - Scoped (
/api/private-scoped) — 有効な JWT とread:messages権限が必要
7
メインサーバーを作成
本番運用向けのタイムアウト設定と適切なシャットダウン処理を備え、メインのエントリポイントですべてを統合します:
cmd/server/main.go
プロジェクト構成
プロジェクト構成
8
APIの実行とテスト
開発サーバーを起動します。次のように表示されます: 以下が表示されます:トークンを使わずにプライベートエンドポイントをテストします (失敗するはずです) :401 Unauthorized エラーが表示されます:有効なトークンでテストするには、Auth0 Dashboard で API を開き、Test タブをクリックしてアクセストークンをコピーします。次に、以下を実行します。スコープが設定されたエンドポイントをテストします (
Server starting on :8080公開エンドポイント (認証は不要) をテストします:read:messages 権限が必要です) :チェックポイントこれで、保護された Go API が用意できたはずです。この API は次のことを行います。
- 認証なしでパブリックなエンドポイントへのリクエストを受け付ける
- 有効なトークンがない場合、保護されたエンドポイントへのリクエストを拒否する
- JWT トークンを Auth0 ドメインと audience に対して検証する
- スコープを使用して、権限ベースのアクセス制御を適用する
API の呼び出し
Authorization ヘッダーに Bearer トークンとしてアクセストークンを渡すことで、どのアプリケーションからでも呼び出せます。
クライアントコードの例
クライアントコードの例
アクセストークンの取得
アクセストークンの取得
- シングルページまたはモバイルアプリ
- Machine-to-Machine (M2M)
シングルページアプリケーションまたはモバイル/ネイティブアプリケーションから API を呼び出す場合は、認可フローが完了するとアクセストークンを取得できます。トークンの取得方法や API の呼び出し方法は、開発しているアプリケーションの種類や使用しているフレームワークによって異なります。
シングルページアプリケーション
React、Vue、Angular の Quickstart とサンプル
モバイル / ネイティブアプリケーション
iOS、Android、React Native の Quickstart
高度な使用方法
DPoP(Proof-of-Possession)セキュリティ
DPoP(Proof-of-Possession)セキュリティ
RFC 9449 で定義されている DPoP (Demonstrating Proof-of-Possession) は、暗号学的なキー バインディングによってトークンの盗難を防ぎ、セキュリティを強化します。DPoP モード:
internal/auth/middleware.go
DPoPAllowed(default) — Bearer と DPoP の両方のトークンを受け入れるDPoPRequired— DPoP トークンのみを受け入れ、Bearer は拒否するDPoPDisabled— Bearer トークンのみを受け入れ、DPoP は拒否する
DPoP は、金融 API、医療 API、高セキュリティが求められるエンタープライズ アプリケーションに推奨されます。詳しくは DPoP documentation をご覧ください。
CORS の設定
CORS の設定
Web アプリケーションからのリクエストを許可するには、CORS を有効にします。シンプルなミドルウェア、または rs/cors のようなライブラリを使用できます。本番環境では、ワイルドカードではなく正確なオリジンを指定してください。
cmd/server/main.go
slog を使用した構造化ログ
slog を使用した構造化ログ
トークンのバリデーションをデバッグするために、詳細なログを有効にします。起動時の確認を追加します。
internal/auth/middleware.go
cmd/server/main.go
トラブルシューティング
よくある問題と解決策
よくある問題と解決策
”Failed to validate JWT” または 401 Unauthorized
問題: API がアクセストークンを見つけられないか、検証できません。解決策:Authorizationヘッダーが含まれていることを確認してください:Authorization: Bearer YOUR_TOKEN- トークンの前に
Bearerが付いていることを確認してください - トークンの有効期限が切れていないことを確認してください
- アクセストークンを使用しており、ID トークンではないことを確認してください
”aud claim mismatch”
問題: トークンの audience が API と一致していません。解決策:AUTH0_AUDIENCE が Auth0 Dashboard の API 識別子と完全に一致していることを確認してください。audience の末尾にスラッシュを付けてはいけません。“unexpected signing method”
問題: トークンのアルゴリズムがバリデーターの設定と一致していません。解決策:- Auth0 はデフォルトで RS256 (非対称) を使用します
- バリデーターで
validator.RS256を指定していることを確認してください - 明示的に設定している場合を除き、Auth0 のトークンに
validator.HS256は使用しないでください
JWKS endpoint に接続できない
問題: JWKS キャッシュプロバイダーが Auth0 の公開鍵エンドポイントに到達できません。解決策:- Auth0 へのネットワーク接続を確認してください (firewall/プロキシ設定)
- JWKS endpoint を手動でテストしてください:
curl https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json - Auth0 のリージョン (us/eu/au) が正しいことを確認してください
import パスが間違っている
問題:cannot find package "github.com/auth0/go-jwt-middleware/v3/..."解決策: すべての import で /v3 接尾辞を使用していることを確認してください:クロックスキュー / トークン期限切れエラー
問題: サーバーの時刻がずれているため、有効なトークンが期限切れに見えてしまいます。解決策: バリデーターにはすでに 30 秒のクロックスキュー許容値が含まれています。さらに必要な場合は、次のように調整してください:クレームの取得に失敗する
問題: ジェネリクス使用時にFailed to retrieve claims が発生します。解決策: 正しい型パラメーターを使用していることを確認してください:次のステップ
- ロールベースのアクセス制御 — きめ細かな権限を実装する
- アクセストークンのベストプラクティス — トークンのセキュリティについて学ぶ
- APIを監視する — ログと監視を設定する
- 本番環境準備チェック — ローンチ前のセキュリティレビュー
リソース
- go-jwt-middleware GitHub — ソースコード、サンプル、DPoP のサポート
- Go API Sample — 完全に動作するサンプル
- Auth0 Community — Auth0 Community でサポートを受ける