You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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值也不正确。

具体修正步骤

  1. 获取GitHub App的正确凭据

    • 进入GitHub App设置页,在「Private keys」板块生成并下载PEM格式的私钥文件
    • 复制页面上的「App ID」(注意不是Client ID)
    • 找到应用的installationId:在GitHub App的「Installations」页面查看,或通过API获取
  2. 修正Laravel-GitHub的配置
    将app连接的配置修改为以下结构,method设为app,填入正确的凭据:

    'app' => [
        'method'         => 'app',
        'appId'          => '你的GitHub App ID',
        'privateKey'     => storage_path('github-app-private-key.pem'), // 也可以直接填入私钥文本内容
        'installationId' => '你的应用安装ID', // 必填,GitHub App必须安装到组织/仓库才能操作
        // 其他可选配置(如缓存令牌等)
    ]
    
  3. 确保代码使用正确的连接
    如果默认连接不是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:51:10