找回密码
 立即注册
首页 业界区 业界 从抓包GitHub Copilot认证请求,认识OAuth 2.0技术 ...

从抓包GitHub Copilot认证请求,认识OAuth 2.0技术

诈知 2025-7-18 09:33:00
引言

在现代开发工具中,GitHub Copilot 以智能、嵌入式的人工智能代码补全能力著称。作为一项涉及用户敏感数据和付费授权的服务,其认证授权流程尤为值得技术研究。本文基于实际抓包 VS Code 中的 Copilot 登录认证请求,系统梳理其 OAuth 2.0 相关实现及配套的安全技术体系,对底层流程进行代码级和架构级分析。
认证流程整体架构

GitHub Copilot 的认证机制采用了标准“授权码(Authorization Code)”模式的 OAuth 2.0 规范(感兴趣的可以深入学习),并辅以微服务架构、JWT 授权令牌交换、API 网关等技术实现跨服务安全、合规高效的数据访问链路。流程涉及主要参与端点如下:

  • GitHub OAuth 服务器 (github.com/login/oauth/*)
  • GitHub Copilot API 网关 (api.github.com/copilot_internal/*)
  • Copilot AI 后端服务 (api.individual.githubcopilot.com/*)
分阶段详细技术剖析

1. OAuth 2.0 授权码模式实现

1.1 授权请求与用户同意
  1. GET https://github.com/login/oauth/authorize
  2.   ?client_id=01ab8ac9400c4e429b23
  3.   &redirect_uri=https://vscode.dev/redirect
  4.   &scope=user:email
  5.   &prompt=select_account
复制代码
开发者要点:

  • client_id 明确 OAuth 应用(如 VS Code 客户端)的唯一身份
  • redirect_uri 保证 redirect 投递的可靠性/可追溯性,需与后台注册一致
  • scope 控制最小授权范围,是 OAuth 2.0 推荐的精细权限策略
  • prompt=select_account 保证多用户环境下明确授权身份,避免混淆
1.2 获取访问令牌
  1. POST https://github.com/login/oauth/access_token
  2. Content-Type: application/x-www-form-urlencoded
  3. client_id=...
  4. &client_secret=...
  5. &code=[CODE]
  6. &redirect_uri=https://vscode.dev/redirect
复制代码
该流程完成用户授权后通过一次后端交换,将临时授权码(code)换为 OAuth Access Token(访问令牌)。
2. 服务侧 Copilot 资格鉴定机制

2.1 调用内控用户接口校验资格
  1. GET https://api.github.com/copilot_internal/user
  2. Authorization: Bearer [ACCESS_TOKEN]
复制代码
实现逻辑分析:

  • 使用 OAuth 访问令牌进行 API 授权
  • 服务端核查 Copilot 订阅状态、类型、有效期等业务逻辑
响应结构示例:
  1. {
  2.   "verifiable_user": true,
  3.   "copilot_access": "allowed",
  4.   "subscription_type": "individual",
  5.   "expires_at": "2024-12-31T23:59:59Z"
  6. }
复制代码
3. JWT 令牌交换与微服务协作

3.1 生成服务专用的 JWT 令牌
  1. GET https://api.github.com/copilot_internal/v2/token
  2. Authorization: Bearer [ACCESS_TOKEN]
复制代码
关键点与实现逻辑:

  • 使用通用 OAuth 令牌向 API Gateway 请求“降权授权令牌”
  • 返回的 JWT 令牌仅具备 AI Copilot 服务访问权限,并具备较短生命周期
JWT Payload 假定结构:
  1. {
  2.   "iss": "api.github.com",
  3.   "aud": "copilot-service",
  4.   "sub": "[USER_HASH]",
  5.   "exp": 1717171717,
  6.   "scope": "copilot:code_completion"
  7. }
复制代码
3.2 声明式的令牌校验流程

AI Copilot 服务通过验证 JWT 签名及声明实现权限控制:
  1. const jwt = require('jsonwebtoken');
  2. const publicKey = process.env.JWT_PUBLIC_KEY;
  3. function verifyToken(token) {
  4.   return jwt.verify(token, publicKey, {
  5.     algorithms: ['RS256'],
  6.     issuer: 'api.github.com',
  7.     audience: 'copilot-service'
  8.   });
  9. }
复制代码
4. Copilot AI 服务的安全访问实现

4.1 模型资源接口调用
  1. GET https://api.individual.githubcopilot.com/models
  2. Authorization: Bearer [COPILOT_JWT]
复制代码

  • 基于 JWT 令牌的接口鉴权,保证资源仅对持权用户开放
  • 域名隔离支持弹性部署与资源隔离
4.2 代码补全 API 调用

[code]POST https://api.individual.githubcopilot.com/chat/completionsAuthorization: Bearer [COPILOT_JWT]Content-Type: application/json{  "prompt": "function fibonacci(n) {\n  if (n
您需要登录后才可以回帖 登录 | 立即注册