Copilot Extensions 用 OpenID Connect (OIDC) について
Copilot Extensions で OpenID Connect (OIDC) を使うと、有効期間の長い GitHub 資格情報を格納するのではなく、クラウド プロバイダーから有効期間の短いトークンを直接交換できます。 この機能により、Copilot エージェントとスキルセットの両方がより安全にユーザーを認証し、クラウド リソースにアクセスできるようになります。
OIDC の概要
多くの場合、Copilot Extensions は、ユーザーに代わってサード パーティのリソースまたは API にアクセスする必要があります。 これまでは、GitHub トークンをシークレットとして格納し、追加の API 呼び出しを行ってこれらのトークンをシステム内のユーザー ID にマップする必要がありました。 OIDC を使うと、拡張機能は、GitHub の ID 情報を交換することで、認証サービスから有効期間の短いアクセス トークンを直接要求できます。
有効にすると、GitHub の OIDC プロバイダーにより、ユーザーと要求コンテキストに関する要求を含むトークンが自動的に生成されます。 認証サービスにより、これらの要求が検証され、自分のサービス専用のスコープのアクセス トークンと交換されます。
GitHub 固有のエンドポイントを個別に維持することなく、既存の API エンドポイントを利用できるため、OIDC の使用は Copilot スキルセットの開発に特に役立ちます。 GitHub トークンを受け入れるためにエンドポイントを複製するのではなく、OIDC を使って GitHub ID をサービスのネイティブ認証トークンに変換できます。
OIDC を使う利点
Copilot Extension に OIDC トークン交換を実装すると、次のことが可能になります。
- 有効期間の長い GitHub トークンを格納しないようにするか、GitHub とサービスの ID の間のマッピングを維持する。
- 自動的に期限切れになり、サービスのニーズに合わせてスコープを指定できる有効期間の短いトークンを使う。
- トークンの検証やユーザー情報のフェッチのために、GitHub の API を追加で呼び出すことを避ける。
- GitHub 用に別のエンドポイントを維持することなく、Copilot スキルと既存の API の直接統合を有効にする。
- GitHub の認証をサービスのネイティブ トークンに変換することで、既存の API エンドポイントを再利用する。
トークン交換フローについて
拡張機能への要求を認証するために、Copilot 拡張性プラットフォーム が OIDC トークンをアクセス トークンと交換する方法の概要を次に示します。
最初の要求
- ユーザーは、Copilot Extension にメッセージを送信します。
- GitHub により、ユーザー ID 情報を含む OIDC トークンが生成されます。
- GitHub により、OIDC トークンを使ってトークン交換エンドポイントが呼び出されます。
- サービスによってトークンが検証され、アクセス トークンが返されます。
- GitHub により、拡張機能への要求にアクセス トークンが追加されます。
# HTTP header
Authorization: Bearer <your-service-token>
X-GitHub-Token: <github-token>
後続の要求
- GitHub により、アクセス トークンは最長 10 分間キャッシュされます。
- キャッシュされたトークンは後続の要求で再利用されます。
- トークンの有効期限が切れるか無効になった場合、GitHub から新しいトークンが要求されます。
OIDC トークンの概要
GitHub の OIDC トークンは、ユーザーと要求コンテキストに関する要求を含む JWT です。
{
"jti": "<unique-token-id>",
"sub": "<github-user-id>",
"aud": "<your-client-id>",
"iss": "https://github.com/login/oauth",
"nbf": 1632492967,
"exp": 1632493867,
"iat": 1632493567,
"act": {
"sub": "api.copilotchat.com"
}
}
ベスト プラクティス
- トークンのスコープを必要最小限のアクセス許可に限定します。
- 適切なエラー処理とログを実装します。
- セキュリティ上の異常がないか、トークン交換パターンを監視します。
- セキュリティ リスクを最小限に抑えるために、トークンの有効期間を短くします。
- アクセス トークンを発行する前に、すべての要求を検証します。
- トークン交換エンドポイントにレート制限を実装することを検討してください。
- すべてのトークン交換通信には HTTPS を使います。