简介
可以设置 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:
-
在 GitHub 上任意页的右上角,单击你的个人资料照片。
-
导航到你的帐户设置。
- 对于由个人帐户拥有的应用,请单击“设置”****。
- 对于组织拥有的应用:
- 单击“你的组织”。
- 在组织的右侧,单击设置。
- 对于由企业拥有的应用:
- 如果使用的是 Enterprise Managed Users,请单击你的企业,以直接转到企业帐户设置。
- 如果使用的是个人帐户,请单击你的企业,然后单击企业右侧的设置。
-
导航到 GitHub App 设置。
- 对于由个人帐户或组织拥有的应用:
- 在左侧边栏中,单击 开发人员设置,然后单击 GitHub Apps。
- 对于由企业拥有的应用:
- 在左侧边栏中,在“设置”下,单击 GitHub Apps。
- 对于由个人帐户或组织拥有的应用:
-
在要为 Copilot 扩展 配置的 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 扩展 客户端 ID。sub
- 主体。 发出请求的 GitHub 用户 ID。 响应仅限于用户有权访问的数据。 如果用户没有权限,则会显示400 Bad Request
。iat
:发布时间。 颁发令牌的时间戳。 这通常是过去时间戳,但表示创建令牌的确切时刻。nbf
:生效时间。 在此时间戳之前,令牌无效。 这应是过去的某一时间戳。exp
:过期时间。 令牌过期时的时间戳。 这应是将来的某一时间戳。act
:参与者。 委托访问中的参与实体。 这应是一个常量字符串。
故障排除
以下部分概述了为 Copilot 扩展实现 OIDC 的常见问题和最佳做法。
令牌验证错误
- 请确保使用的是正确的 JWKS 终结点。
- 验证所有必需声明是否存在且有效。
- 检查时间戳(
iat
、nbf
和exp
)是否在有效范围内。
令牌交换失败
- 对于无效令牌,返回
HTTP 400
。 - 如果用户缺少必要权限,则返回
HTTP 403
。 - 如果 GitHub 收到 403 响应,它将使用新令牌重试请求。
性能问题
- 实现高效令牌验证,以最大程度减少延迟。
- 使用适当的令牌过期时间(建议:10 分钟或更短)。
- 考虑高流量扩展的缓存影响。