GitHub App生成token调用GraphQL API鉴权失败如何解决
问题背景
编写GitHub工作流实现将议题(Issues)、拉取请求(PRs)作为项目项添加到Projects Beta的过程中,此前使用个人访问令牌调用GraphQL API可正常运行,更换为GitHub App生成的token后调用失败,工作流运行时API返回要求登录的报错,报错信息如下:
Run item_id="$( gh api graphql -f query=' Welcome to GitHub CLI! To authenticate, please run `gh auth login`.
当前通过workflow-application-token-action获取GitHub App生成的token,执行查询时已尝试将该token设置为环境变量中的GITHUB_TOKEN,需要可行的排查和解决方法。
解决方案
按以下顺序排查即可解决问题:
- 先校验GitHub App的权限配置
操作Projects Beta需要GitHub App开通对应权限:必须开启项目(Projects)读写权限、议题(Issues)读写权限、拉取请求(Pull Requests)读写权限;如果操作的是组织下的项目,需要将App安装到对应组织,并且授予目标项目的访问权限,权限缺失时gh CLI会直接判定为未认证状态。 - 不要依赖全局
GITHUB_TOKEN环境变量传参,显式给gh CLI传入App生成的token
工作流中默认存在内置自动生成的GITHUB_TOKEN,如果只是在单步骤内覆盖环境变量,很容易出现作用域不生效的问题,执行gh命令时直接通过--token参数传入通过action生成的token即可,示例写法:
注意要给生成token的action步骤设置唯一id,比如item_id="$( gh api graphql --token "${{ steps.get_app_token.outputs.token }}" -f query=' # 此处填写你的GraphQL查询语句 ')"id: get_app_token,才能正确读取到步骤输出的token值。 - 前置校验token有效性
在调用GraphQL接口前加一步测试认证,先确认token本身可用,示例命令:
如果这一步就返回登录提示,说明token生成环节配置有误,检查workflow-application-token-action中填写的App ID、私钥、安装ID是否和实际安装的GitHub App信息匹配。gh api user --token "${{ steps.get_app_token.outputs.token }}" - 确认gh CLI版本
部分旧版本gh CLI对GitHub App生成的token识别有兼容问题,可以在工作流中先把gh升级到最新版本再执行后续命令。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

