github账号的ghu令牌获取原理

要逆向copilot的chat服务,首先需要获取到github账号的token,这个token一般以ghu开头,即用户级别的GitHub令牌。目前大多数人可能都是通过始皇的https://cocopilot.org/copilot/token页面获取,假如始皇的服务掉线了,有没有可能自己部署一套服务或者通过脚本来实现?

本文就是结合目前关注的一些项目,一方面分析获取ghu的原理和过程,另一方面则给出参考的示例代码,供大家参考。

事实上,获取ghu令牌只需要三个步骤:

1.获取device_code和user_code
通过以下post请求实现:

curl --location 'https://github.com/login/device/code' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "client_id": "Iv1.b507a08c87ecfe98",
    "scope": "read:user"
}'

其中的client_id字段正是github copilot的插件应用的id,scope字段定义了请求的权限范围,表示请求读取用户信息的权限。

发出post请求后,你会得到如下的响应数据:

{
    "device_code": "e9b9fca2f56dbdf90e9ddf562f07******",
    "user_code": "AD88-69BA",
    "verification_uri": "https://github.com/login/device",
    "expires_in": 899,
    "interval": 5
}

可以看到,你获取到了device_code和user_code这两个字段,后面在github登录时需要输入的就是其中的user_code。

2.登录github验证
然后就需要打开https://github.com/login/device连接,使用刚才返回的user_code激活GitHub Copilot应用。

3.查询获取访问令牌
然后就可以使用post请求携带之前获取到的device_code来获取ghu令牌了,post请求如下:

curl --location 'https://github.com/login/oauth/access_token' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
    "client_id": "Iv1.b507a08c87ecfe98",
    "device_code": "e9b9fca2f56dbdf90e9ddf562f07******",
    "grant_type": "urn:ietf:params:oauth:grant-type:device_code"
}'

发出post请求后,你会得到如下的响应数据:

{
    "access_token": "ghu_BsvmohOSN31GWxOUHLOCclGquoeB**********",
    "token_type": "bearer",
    "scope": ""
}
103 个赞

绝对前排马克 :star_struck:

4 个赞

怎么两次device code不一致,第一次获取的和第三步发送的

4 个赞

常规话题软件开发

已修改,要用同一个

3 个赞

牛逼,你想篡权始皇帝吗?

4 个赞

本地最好备一个copilot-gpt-service

3 个赞

学习了~~

3 个赞

收藏学习

3 个赞

厉害,吾皇的coco殡天了再回来研究。

3 个赞

cocoNext

2 个赞

思路很干练
:star_struck:

2 个赞

学习了

2 个赞

学习了

2 个赞

昨天coco寄了,果然有佬分享了

24 个赞

只能说 好人一生平安

2 个赞

再讲一下使用这个token请求响应的原理

3 个赞

学习一下

2 个赞

:+1:

2 个赞

已标记备用

1 个赞