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

Inno Setup脚本使用PAT下载GitHub私有仓库归档失败求助

问题描述

我正在编写一款安装脚本,用于从GitHub下载私有仓库,代码如下:

if Pat <> '' then
begin
  Pat := Pat + '@'
end;

Url := Format('https://%sgithub.com/<MY_REPO>/%s/archive/main.zip', [Pat, RepoName]);

try
  DownloadTemporaryFile(Url, 'main.zip', '', @OnDownloadProgress);
except
  MsgBox('Failed to download the files from the GitHub repository.', mbError, MB_OK);
  Abort();
end;

针对公开仓库,将Pat设为空字符串即可正常下载,但私有仓库会返回404错误码。我已尝试直接使用个人访问令牌(PAT)以及「用户名:令牌」的形式,也确认了组织名和仓库名无误,且在浏览器中访问该URL可正常下载。我的账号还启用了MFA,请问如何解决该问题?

该脚本是安装程序的一部分,用户输入有效的PAT后即可下载并安装仓库中的代码,仅拥有有效PAT的用户可访问该代码。


解决方案

针对启用MFA的账号,直接在URL拼接用户名和PAT的方式无法正常通过验证,推荐通过HTTP请求头传递Authorization的方式处理私有仓库下载请求,具体调整如下:

  • 修改认证逻辑,使用Authorization请求头
    GitHub支持通过Authorization: token <你的PAT>请求头完成身份验证,这种方式适配MFA账号。你需要调整代码,给下载函数添加请求头参数:

    var
      Headers: String;
    begin
      Headers := '';
      if Pat <> '' then
      begin
        Headers := 'Authorization: token ' + Pat;
      end;
    
      Url := 'https://github.com/<MY_REPO>/' + RepoName + '/archive/main.zip';
    
      try
        // 确保DownloadTemporaryFile支持传递自定义HTTP请求头
        DownloadTemporaryFile(Url, 'main.zip', Headers, @OnDownloadProgress);
      except
        MsgBox('Failed to download the files from the GitHub repository.', mbError, MB_OK);
        Abort();
      end;
    end;
    
  • 验证PAT权限
    确认你的PAT拥有repo权限(访问私有仓库的核心权限),若为组织仓库,还需检查账号在组织内的访问权限,以及PAT是否被授权访问该组织资源。

  • 放弃URL拼接认证的方式
    URL拼接用户名和PAT不仅在MFA场景下失效,还存在凭证泄露的安全风险,使用请求头传递是更安全可靠的方案。

如果当前使用的DownloadTemporaryFile不支持自定义请求头,可更换为支持设置HTTP头的下载函数,或封装底层HTTP请求逻辑来添加Authorization头。


内容的提问来源于stack exchange,提问作者Woody1193

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:13:15