如何避免GitHub App API认证失败?Laravel-GitHub库使用问题
问题:GitHub App认证创建/管理Issues时提示Bad credentials错误
我正在构建一个通过GitHub App认证来创建和管理Issues的流程,使用Laravel-GitHub库。
配置里选了app连接方式,已经在组织创建了新应用,把凭据填入了配置数组:
... 'app' => [ 'method' => 'application', 'clientId' => 'Iv1.5aa..............', 'clientSecret' => 'ea6e9................' ... ]
注:使用用户token的主连接方式可以正常运行,但所有Issues都会以我的用户名创建,不符合需求。
每次请求都会触发错误:Bad credentials in /Project/Path/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php on line 123
请问我是不是用错了凭据?还有什么遗漏的配置吗?
以下是Job类中的库实现代码:
class ProcessFeedback implements ShouldQueue, ShouldBeUnique { public function handle(GitHubManager $github) { $issue = $github->issues()->show( config('services.github.owner', 'perfect-user'), config('services.github.repo', 'perfect-repo'), $number ); dd($issue); } }
解决方案
核心问题:用错了凭据类型
GitHub App认证不能直接用Client ID和Client Secret——这是OAuth App的凭据,GitHub App需要的是**私钥(Private Key)**和App ID,而非Client Secret。同时你配置里的method值也不正确。
具体修正步骤
获取GitHub App的正确凭据
- 进入GitHub App设置页,在「Private keys」板块生成并下载PEM格式的私钥文件
- 复制页面上的「App ID」(注意不是Client ID)
- 找到应用的
installationId:在GitHub App的「Installations」页面查看,或通过API获取
修正Laravel-GitHub的配置
将app连接的配置修改为以下结构,method设为app,填入正确的凭据:'app' => [ 'method' => 'app', 'appId' => '你的GitHub App ID', 'privateKey' => storage_path('github-app-private-key.pem'), // 也可以直接填入私钥文本内容 'installationId' => '你的应用安装ID', // 必填,GitHub App必须安装到组织/仓库才能操作 // 其他可选配置(如缓存令牌等) ]确保代码使用正确的连接
如果默认连接不是app,需要显式切换到该连接:public function handle(GitHubManager $github) { // 切换到app连接 $githubApp = $github->connection('app'); $issue = $githubApp->issues()->show( config('services.github.owner', 'perfect-user'), config('services.github.repo', 'perfect-repo'), $number ); dd($issue); }
额外说明
GitHub App的认证基于JWT令牌:库会自动用私钥生成JWT,再获取安装令牌来调用API。你之前用的application方法是给OAuth App设计的,所以会触发凭据错误。
内容的提问来源于stack exchange,提问作者3m1n3nc3
相关产品推荐
相关产品推荐

