Skip to main content

Copilot 拡張機能の OpenID Connect (OIDC)

OpenID Connect (OIDC) を使用して、有効期間の長い資格情報を格納せずに、Copilot Extensions がユーザーを安全に認証しクラウド リソースにアクセスできるようにする方法について説明します。

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 トークンをアクセス トークンと交換する方法の概要を次に示します。

最初の要求

  1. ユーザーは、Copilot Extension にメッセージを送信します。
  2. GitHub により、ユーザー ID 情報を含む OIDC トークンが生成されます。
  3. GitHub により、OIDC トークンを使ってトークン交換エンドポイントが呼び出されます。
  4. サービスによってトークンが検証され、アクセス トークンが返されます。
  5. GitHub により、拡張機能への要求にアクセス トークンが追加されます。
# HTTP header
Authorization: Bearer <your-service-token>
X-GitHub-Token: <github-token>

後続の要求

  1. GitHub により、アクセス トークンは最長 10 分間キャッシュされます。
  2. キャッシュされたトークンは後続の要求で再利用されます。
  3. トークンの有効期限が切れるか無効になった場合、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 を使います。

次のステップ