我的组织有一个github页面,我想从第三方api调用数据,我需要一个身份验证令牌。我是否可以在公共存储库上显示auth令牌的情况下发布此github页面?
答案 0 :(得分:33)
简而言之,没有。如果您的GitHub回购是公开的,那么它的所有资产都是公开的。您可以将repo设为私有,如果使用username.github.io
约定命名,或者它具有gh-pages
分支,它仍将在GitHub页面上发布。虽然这是一个选择,但这不一定是正确的事情。
如果您的密钥位于GitHub页面回购中,则听起来它用于JavaScript中的客户端API调用。如果是这样,您的身份验证令牌是公开可见的,无论它是在您的公共存储库中还是在客户端文件中发送到浏览器。这通常很好。第三方API可能已根据您网站的域生成了身份验证令牌,并将使用该令牌的呼叫限制为源自您域的网页。否则,他们可能只需要auth令牌来记录请求和监视使用情况。
如果auth令牌真的是私有的,那么您可能需要编写私有服务器端代码来调用第三方API。然后,您的GitHub Pages站点可以为您的服务提供所需的数据。我必须在Web API出现安全问题之前做到这一点,但我仍然需要从客户端检索非敏感数据。
答案 1 :(得分:3)
简而言之,可以将身份验证令牌存储在环境变量中,并在 .env 文件上使用 gitignore 隐藏身份验证公共回购中的令牌。刷新客户端API上的auth令牌,然后将更改推送到公共仓库,并将您的更新重新部署到 gh-pages 分支。我在下面提供了此过程的示例。
注意
如果您输入了密码或API密钥,请进行更改!如果提交了密钥,请生成一个新密钥。在GitHub上参考一般最佳做法。
如果对您的应用程序使用 React ,则 SKIP步骤1和2 ,因为 React 已预先安装了自定义环境变量。参考Create React App。
完整的解释可以在下面找到:
1。。在应用程序根目录中安装 dotenv 依赖项(此示例将使用 Node.js )参考npm ,运行命令:
npm install dotenv
2。。在下面添加代码以在 index.js 文件中导入语句。
require('dotenv').config();
3。。在app的根目录中创建 .env 文件,并将身份验证令牌添加为变量。请注意,使用反应时,必须在变量名前加上REACT_APP_
AUTH_TOKEN=987asc8iks0lenv7
4。。在 process.env 上使用 console.log()检查变量是否正确存储。
console.log(process.env.AUTH_TOKEN);
5。。更新应用程序代码中对auth令牌的所有引用。
OLD VARIABLE: const auth_token = '987asc8iks0lenv7';
NEW VARIABLE: const auth_token = process.env.AUTH_TOKEN;
6。。创建 .gitignore 文件并将其添加到应用程序的根目录,并在下面添加代码以使 git 忽略 .env 文件,用于存储身份验证令牌。
.env
7。。将更新添加,提交并推送到GitHub上的应用程序 master 分支。
8。。将更新部署或重新部署到 gh-pages 分支。使用下面的命令。
npm run deploy
答案 2 :(得分:2)
GitHub Actions应该可以满足您的需求。
您可以使用可视工作流编辑器或存储库设置添加机密。创建密钥后,GitHub会立即加密该值,您将无法再查看或编辑该值。具有存储库写权限的任何人都可以在该存储库中创建和使用机密。
但是,GitHub Actions当前在公共Beta中可用,因此在此Beta期间应避免使用高价值的工作流和内容。
答案 3 :(得分:0)
Ashen的答案不适用于此用例。通过Github配置的机密仅适用于Github Actions(see documentation),因此-在实践中-主要适用于类似CI / CD的应用程序。不适用于客户端API调用。