はじめに
OIDC を設定すると、Copilot エージェントとスキルセットはユーザーをより安全に認証し、クラウド リソースへのアクセスをより安全に行えるようになります。 OIDC の詳細については、「Copilot 拡張機能の OpenID Connect (OIDC)」を参照してください。
拡張機能に合わせて OIDC を設定するには、3 つの手順があります。
トークン交換エンドポイントを構成する
RFC 8693 OAuth 2.0 Token Exchange に準拠するエンドポイントをサービス内に作成します。 このエンドポイントは次のことを行う必要があります。
-
次のフォーム エンコード パラメーターを含む
POST
要求を受け入れます。grant_type=urn:ietf:params:oauth:grant-type:token-exchange &resource=<https://your-service.com/resource> &subject_token=<github-jwt-token> &subject_token_type=urn:ietf:params:oauth:token-type:id_token
-
サービスのアクセス トークンを含む JSON 応答を返します。
{ "access_token": <"your-service-token">, "issued_token_type":"urn:ietf:params:oauth:token-type:access_token", "token_type": "Bearer", "expires_in": 3600 }
-
検証が失敗した場合は、エラー応答を返します。
{ "error": "invalid_request" }
Copilot Extension の設定で OIDC を有効にする
Copilot Extension の構成で、OIDC を有効にします。
-
GitHub の任意のページの右上隅にある、自分のプロファイル写真をクリックします。
-
アカウント設定にアクセスしてください。
- 個人用アカウントが所有するアプリの場合は、[設定] をクリックします。
- 組織が所有するアプリの場合:
- [自分の組織] をクリックします。
- 組織の右側にある [設定] をクリックします。
- Enterprise が所有するアプリの場合:
- Enterprise Managed Users を使用する場合は、[Enterprise] をクリックして Enterprise アカウントの設定に移動します。
- 個人用アカウントを使用する場合は、[Enterprise] をクリックしてから、Enterprise の右側にある [設定] をクリックします。
-
GitHub App 設定にアクセスしてください。
- 個人用アカウントまたは組織が所有するアプリの場合:
- 左側のサイドバーで、 [開発者向け設定] をクリックし、 [GitHub Apps] をクリックします。
- Enterprise が所有するアプリの場合:
- 左側のサイドバーで、 [設定] から GitHub Apps をクリックします。
- 個人用アカウントまたは組織が所有するアプリの場合:
-
Copilot Extension に対して構成する GitHub App の右側にある [Edit] をクリックします。
-
左側のサイドバーで、[Copilot] をクリックします。
-
[OpenID Connect Token Exchange] で、[Enabled] をオンにします。
-
[Token exchange endpoint] フィールドに、トークン交換 URL を入力します。
-
[Request header key] フィールドに、サービスのトークンのヘッダー キーを入力します。 既定値は、
Authorization
です。 -
[Request header value] フィールドに、ヘッダー値の形式を入力します。 既定値は、
Bearer ${token}
です。
OIDC トークンを検証する
トークン交換エンドポイントは、以下の手順に従って、GitHub OIDC トークンを検証する必要があります。
- https://github.com/login/oauth/.well-known/openid-configuration から JSON Web キー セット (JWKS) をフェッチします。
- トークンのシグネチャを確認します。
- 必要な要求を検証します。
aud
: 対象ユーザー。 Copilot Extension のクライアント ID。sub
: 件名。 要求を行う GitHub ユーザー ID。 応答は、ユーザーがアクセス許可を持っているデータに限定されます。 ユーザーにアクセス許可がない場合は、400 Bad Request
が表示されます。iat
: 発行時刻。 トークンが発行されたときのタイムスタンプ。 通常、これは過去のタイムスタンプですが、トークンが作成された正確な瞬間を表します。nbf
: 期間の開始時刻。 このタイムスタンプより前には、トークンが無効です。 これは過去のタイムスタンプである必要があります。exp
: 有効期限。 トークンの有効期限が切れたときのタイムスタンプ。 これは将来のタイムスタンプである必要があります。act
: アクター。 委任されたアクセスの実行エンティティ。 これは定数文字列である必要があります。
トラブルシューティング
次のセクションでは、Copilot Extension 用に OIDC を実装する際の一般的な問題とベスト プラクティスについて概要を説明します。
トークン検証エラー
- 正しい JWKS エンドポイントを使っていることを確認します。
- 必要な要求がすべて存在し、有効であることを確認します。
- タイムスタンプ (
iat
、nbf
、exp
) が有効な範囲内にあることをチェックします。
トークン交換エラー
- 無効なトークンの場合は
HTTP 400
を返します。 - 必要なアクセス許可がユーザーにない場合は、
HTTP 403
を返します。 - GitHub が 403 応答を受信した場合、新しいトークンを使って要求を再試行します。
パフォーマンスの問題
- 効率的なトークン検証を実装して待機時間を最小限に抑えます。
- 適切なトークンの有効期限を使います (推奨: 10 分以下)。
- 高トラフィックの拡張機能の場合は、キャッシュの影響を考慮します。