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
相关产品推荐
相关产品推荐

