Skip to main content

为 GitHub Copilot 扩展设置 OIDC

了解如何使用 Copilot 扩展 设置 OpenID Connect (OIDC) 以增强安全性。

简介

可以设置 OIDC,使 Copilot 代理和技能组可以更安全地对用户进行身份验证并访问云资源。 有关 OIDC 的详细信息,请参阅“适用于 Copilot 扩展的 OpenID Connect (OIDC)”。

为扩展设置 OIDC 有三个步骤。

配置令牌交换终结点

在服务中创建一个符合 RFC 8693 OAuth 2.0 令牌交换的终结点。 此终结点应:

  • 接受具有以下表单编码参数的 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 扩展的设置中启用 OIDC

在 Copilot 扩展的配置中,启用 OIDC:

  1. 在 GitHub 上任意页的右上角,单击你的个人资料照片。

  2. 导航到你的帐户设置。

    • 对于由个人帐户拥有的应用,请单击“设置”****。
    • 对于组织拥有的应用:
      1. 单击“你的组织”。
      2. 在组织的右侧,单击设置
    • 对于由企业拥有的应用:
      1. 如果使用的是 Enterprise Managed Users,请单击你的企业,以直接转到企业帐户设置。
      2. 如果使用的是个人帐户,请单击你的企业,然后单击企业右侧的设置
  3. 导航到 GitHub App 设置。

    • 对于由个人帐户或组织拥有的应用:
      1. 在左侧边栏中,单击 开发人员设置,然后单击 GitHub Apps
    • 对于由企业拥有的应用:
      1. 在左侧边栏中,在“设置”下,单击 GitHub Apps
  4. 在要为 Copilot 扩展 配置的 GitHub App 的右侧,单击“Edit”****。

  5. 在左侧边栏中,单击“Copilot”。****

  6. 在“OpenID Connect Token Exchange”下,选中“Enabled”********。

  7. 在“Token exchange endpoint”字段中,输入令牌交换 URL****。

  8. 在“Request header key”字段中,输入服务令牌的标头密钥****。 默认为 Authorization

  9. 在“Request header value”字段中,输入标头值格式****。 默认为 Bearer ${token}

验证 OIDC 令牌

令牌交换终结点应遵照以下步骤验证 GitHub OIDC 令牌:

  1. https://github.com/login/oauth/.well-known/openid-configuration 提取 JSON Web 密钥集 (JWKS)。
  2. 验证令牌签名。
  3. 验证所需声明。
    • aud:受众。 你的 Copilot 扩展 客户端 ID。
    • sub- 主体。 发出请求的 GitHub 用户 ID。 响应仅限于用户有权访问的数据。 如果用户没有权限,则会显示 400 Bad Request
    • iat:发布时间。 颁发令牌的时间戳。 这通常是过去时间戳,但表示创建令牌的确切时刻。
    • nbf:生效时间。 在此时间戳之前,令牌无效。 这应是过去的某一时间戳。
    • exp:过期时间。 令牌过期时的时间戳。 这应是将来的某一时间戳。
    • act:参与者。 委托访问中的参与实体。 这应是一个常量字符串。

故障排除

以下部分概述了为 Copilot 扩展实现 OIDC 的常见问题和最佳做法。

令牌验证错误

  • 请确保使用的是正确的 JWKS 终结点。
  • 验证所有必需声明是否存在且有效。
  • 检查时间戳(iatnbfexp)是否在有效范围内。

令牌交换失败

  • 对于无效令牌,返回 HTTP 400
  • 如果用户缺少必要权限,则返回 HTTP 403
  • 如果 GitHub 收到 403 响应,它将使用新令牌重试请求。

性能问题

  • 实现高效令牌验证,以最大程度减少延迟。
  • 使用适当的令牌过期时间(建议:10 分钟或更短)。
  • 考虑高流量扩展的缓存影响。

其他阅读材料