繁体   English   中英

隐藏 Github 页面的 api 密钥

[英]hide api key for a Github page

我有我的组织的 github 页面,我想在其中从需要身份验证令牌的 3rd 方 api 调用数据。 我可以发布此 github 页面而无需在公共存储库上显示身份验证令牌吗?

简而言之,没有。 如果您的 GitHub 存储库是公开的,则其所有资产都是公开的。 您可以将 repo 设为私有,如果使用username.github.io约定命名或者它有一个gh-pages分支,它仍然会在 GitHub Pages 上发布。 虽然这是一种选择,但这不一定是正确的做法。

如果您的密钥在您的 GitHub Pages 存储库中,那么它听起来像是用于 JavaScript 中的客户端 API 调用。 如果是这样,无论是在公共存储库中还是在客户端文件中发送到浏览器,您的身份验证令牌都是公开可见的。 这通常很好。 第三方 API 可能已根据您网站的域生成了身份验证令牌,并将使用该令牌的调用限制为源自您的域的页面。 否则,他们可能只需要 auth 令牌来记录请求和监控使用情况。

如果身份验证令牌确实是私有的,那么您可能需要编写私有的服务器端代码来调用第三方 API。 然后,您的 GitHub Pages 站点可以访问您的服务以获取所需的数据。 在 Web API 存在安全问题之前,我不得不这样做,但我仍然需要从客户端检索非敏感数据。

简而言之,是的,您可以将身份验证令牌存储在环境变量中,并在.env文件中使用gitignore来隐藏公共存储库中的身份验证令牌。 在客户端 API 上刷新身份验证令牌,然后将更改推送到公共存储库并将更新重新部署到gh-pages分支。 我在下面提供了此过程的示例。

笔记

如果您提交了密码或 API 密钥,请更改它! 如果您提交了一个密钥,则生成一个新的。 参考GitHub 上的一般最佳实践。

如果在您的应用程序中使用React ,请跳过步骤 1 和 2,因为React已经预先安装了自定义环境变量。 参考创建 React 应用程序

完整的解释可以在下面找到:

1.在应用根目录安装dotenv依赖(本例将使用Node.js )参考npm ,运行命令:

npm install dotenv

2.index.js文件中添加以下代码以导入语句。

require('dotenv').config();

3.在app的根目录下创建.env文件并添加auth token作为变量。 注意使用React时必须在变量名前加上REACT_APP_

AUTH_TOKEN=987asc8iks0lenv7

4.process.env上使用console.log()检查变量是否正确存储。

console.log(process.env.AUTH_TOKEN);

5.更新应用程序代码中对身份验证令牌的所有引用。

OLD VARIABLE: const auth_token = '987asc8iks0lenv7';

NEW VARIABLE: const auth_token = process.env.AUTH_TOKEN;

6.在应用程序的根目录创建并添加.gitignore文件,并在下面添加代码让git忽略存储auth令牌的.env文件。

.env

7.添加、提交和推送更新到 GitHub 上的应用程序分支。

8.将更新部署或重新部署到gh-pages分支。 使用下面的命令。

npm run deploy

Ashen 的答案不适用于此用例。 通过 Github 配置的 Secret 仅可用于 Github Actions( 参见文档),因此 - 在实践中 - 主要用于 CI/CD 类应用程序。 不适用于例如客户端 API 调用。

GitHub Actions应该可以满足您的需求。

您可以使用可视化工作流编辑器或存储库设置添加机密。 创建密钥后,GitHub 会立即加密该值,您将无法再查看或编辑该值。 任何对存储库具有写入权限的人都可以在该存储库中创建和使用机密。

但是,GitHub Actions 目前处于公开测试版中,因此在此测试期间应避免用于高价值的工作流程和内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM