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

如何在JS文件中隐藏PAT以部署至GitHub Pages?

解决纯前端调用GitHub API时PAT暴露的问题

核心问题本质

GitHub会自动扫描公开代码中的PAT并立即吊销,这是平台的安全防护机制。纯前端代码无法安全存储敏感凭证,因为所有前端资源都会被用户的浏览器解析,任何硬编码的密钥都会被直接暴露。

可行解决方案

1. 改用GitHub API匿名访问(限公开资源)

如果你的需求只是获取公开仓库、公开Gist等无需认证的资源,直接使用匿名请求即可。GitHub对匿名请求的速率限制是60次/小时,足够小型应用使用。

示例代码:

// 获取指定公开仓库信息
fetch('https://api.github.com/repos/octocat/Hello-World')
  .then(res => res.json())
  .then(data => console.log(data));

2. 搭建后端代理服务(推荐)

将认证逻辑转移到后端,前端通过调用自己的后端接口间接访问GitHub API,PAT存储在后端的环境变量中,不会暴露给前端用户。

可以选择轻量化的无服务器方案,比如Vercel Edge Functions、Netlify Functions,无需搭建完整的服务器:

示例:Vercel Edge Function代理

  1. 在项目根目录创建api/proxy.js文件:
export default async function handler(request) {
  // 提取要转发的GitHub API路径
  const targetUrl = request.url.replace(`${request.nextUrl.origin}/api/proxy`, 'https://api.github.com');
  
  // 带着PAT请求GitHub API
  const githubResponse = await fetch(targetUrl, {
    headers: {
      Authorization: `token ${process.env.GITHUB_PAT}`,
      Accept: 'application/vnd.github.v3+json'
    }
  });

  // 将响应返回给前端
  return new Response(githubResponse.body, {
    status: githubResponse.status,
    headers: githubResponse.headers
  });
}
  1. 在Vercel后台设置环境变量GITHUB_PAT,值为你的个人访问令牌。
  2. 前端调用代理接口:
// 通过代理获取仓库信息
fetch('/api/proxy/repos/octocat/Hello-World')
  .then(res => res.json())
  .then(data => console.log(data));

3. 使用GitHub OAuth授权(用户专属权限)

如果需要访问用户个人的GitHub资源(比如用户自己的仓库、Gist),可以采用OAuth授权流程,让用户自己授权你的应用,获取临时的访问令牌:

  • 注册GitHub OAuth应用,获取Client ID和Client Secret(后者需存在后端)。
  • 前端引导用户跳转到GitHub授权页面,用户授权后,GitHub会返回一个code。
  • 前端将code发送到你的后端,后端用Client ID、Client Secret和code换取用户的access token。
  • 前端使用这个用户专属的access token调用GitHub API,无需暴露你的PAT。

关键提醒

绝对不要尝试在前端代码中存储或传递PAT,无论通过何种加密或混淆手段——浏览器的开发者工具可以轻松获取所有前端资源,GitHub的扫描机制也会快速识别并吊销暴露的令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:12:40