如何通过GitHub API为已安装GitHub App的用户创建仓库?
问题描述
我开发了一款供GitHub个人用户安装的GitHub App,希望通过GitHub API在用户的个人账户中创建新仓库。我已花费数日查阅GitHub API官方文档中“为已认证用户创建仓库”的相关内容,但未取得成功。
我可以通过GitHub App的私钥生成JWT,再借此为GitHub App安装实例(即安装该应用的用户账户)生成访问令牌:
获取访问令牌的请求示例
curl -i -X POST -H "Authorization: Bearer <<<JWT>>>" -H "Accept: application/vnd.github+json" https://api.github.com/app/installations/<<<Installation ID>>>/access_tokens
响应示例
{ "token": "ghs_zdhWvuGrhoi4UJsd1tX4Ggtae5f84jdu8tH3", "expires_at": "2022-11-01T12:00:00Z", "permissions": { "administration": "write", "metadata": "read" }, "repository_selection": "all" }
从响应来看,该访问令牌拥有administration: write权限,理论上应具备创建仓库的权限,但我对此存疑。我写出了如下请求,是否需要使用生成的新访问令牌?能否协助我调整为GitHub App安装实例创建新仓库的GitHub API请求格式?
我当前的请求
curl \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer ghs_zdhWvuGrhoi4UJsd1tX4Ggtae5f84jdu8tH3" \ https://api.github.com/user/repos \ -d '{"name":"Repo-Created-From-GitHub-API"}'
解决方案
令牌使用确认:必须使用生成的安装访问令牌(即响应中的
ghs_xxx字符串)发起请求,你的思路是对的,但请求格式有关键错误。身份验证头修正:GitHub App安装令牌的身份验证头需使用
token前缀,而非Bearer——这是导致请求失败的核心原因之一。调整后的有效请求:
curl \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: token ghs_zdhWvuGrhoi4UJsd1tX4Ggtae5f84jdu8tH3" \ https://api.github.com/user/repos \ -d '{"name":"Repo-Created-From-GitHub-API", "private": false}'
- 额外检查项:
- 确认GitHub App在安装流程中已向用户请求
administration: write权限,仅令牌返回该权限但用户未授予的话仍会失败; - 检查令牌是否过期(有效期1小时,以响应中的
expires_at为准); - 若请求仍失败,添加
-v参数查看详细错误响应,常见问题包括仓库名称已存在、账户权限限制等。
- 确认GitHub App在安装流程中已向用户请求
内容的提问来源于stack exchange,提问作者Josh Kautz
相关产品推荐
相关产品推荐

