我有一个使用两个第三方服务的React应用程序。该应用已开始使用react-create-app
。
这两个服务都需要一个API密钥。
一键通过脚本标签提供,如下所示:
<script type="text/javascript" src="https://myapi?key=MY_KEY">
</script>
另一个API密钥用于请求中。我将实际密钥存储在一个常量中,并用它来构成请求。像这样:
const MY_OTHER_KEY = 'MY_OTHER_KEY'
let url = `http://myotherapi?key=${MY_OTHER_KEY}&q=${query}`
Google
在处理API密钥方面的最佳做法提示是:
不要将API密钥直接嵌入代码中
这使我想到了第一个问题:
1.如何在中使用变量index.html
?
在我的index.html
文件中,我有两个看起来像这样的标签:
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
显然%PUBLIC_URL%
是一个变量。如何添加变量%MY_KEY%
以避免将API密钥直接嵌入代码中?
为了得到这样的东西:
<script type="text/javascript" src="https://myapi?key=%MY_KEY%">
</script>
与此问题相关,像我一样,将API密钥存储在常量中是否安全MY_OTHER_KEY
?
谷歌还说:
不要将API密钥存储在应用程序源代码树中的文件中
这使我想到第二个问题:
2. API密钥是否仍未包含在捆绑软件中?
说我按照Google所说的去做
…将它们存储在环境变量或应用程序源代码树之外的文件中
假设我将密钥存储在外部文件中。我认为该文件将在某个时候被读取,其内容要么复制到捆绑软件中,要么以其他方式引用。最后,除了可能很难找到之外,密钥是否仍在捆绑包中仍然可见?这到底有什么帮助?
3.是否有在React应用程序中使用API密钥的规范方法? 还是由单个开发人员决定?
自我解释,我正在寻找解决这一问题的有效方法。
谢谢您的帮助!
1.如何在index.html中使用变量?
答案1: 请仔细阅读“ 添加自定义环境变量”以了解如何添加您作为示例显示的类型的环境变量。
2. API密钥是否仍未包含在捆绑软件中?
答案2:
即使在MY_KEY
脚本标签中将键()作为环境变量使用,它也将呈现在页面上并可见。通常,这些是浏览器键,旨在在客户端使用。可以通过在请求中提供Http
Referer标头来限制它们。有关在此处保护这些密钥的有效性的更多信息。但是,API密钥(如MY_OTHER_KEY
)不应在客户端使用,并且不应呈现在script标签中或存储在客户端JS中。
3.是否有在React应用程序中使用API密钥的规范方法? 还是由单个开发人员决定?
答案3:
使用第三方API密钥的规范方法是让您的客户端应用向您的后端API发送请求。然后,您的后端API会根据第三方API格式化请求,添加密钥并调用第三方API。收到响应后,可以将其解压缩并将其转换为前端应用程序可以理解的域对象,也可以将原始响应发送回前端应用程序。这样,API密钥将保留在后端,并且永远不会发送到客户端。
我有一个React应用程序使用了两个第三方服务。应用程序是使用启动的。 这两个服务都需要API密钥。 一个键是通过脚本标记提供的,如下所示: 这就引出了我的第一个问题: 1.如何使用中的变量? 在我的文件中,我有两个如下所示的标记: 与此问题相关的是,将API密钥存储在常量中是否安全,就像我对所做的那样? 谷歌还表示: 不要将API键存储在应用程序源树中的文件中 说我照谷歌说的做 ...将它们存储
和 Flux 类似,Redux 也是需要注册一个回调函数 store.subscribe(listener) 来获取 State 的更新,然后我们要在 listener 里面调用 setState() 来更新 React 组件。 Redux 官方提供了 react-redux 来简化 React 和 Redux 之间的绑定,不再需要像 Flux 那样手动注册/解绑回调函数。 接下来看一下是怎么做到
Swagger支持api密钥的安全性,但这似乎仅限于单个参数。 有没有办法定义一组参数(key和secret)作为请求中的参数? 或者,唯一的方法就是跳过安全方案,只将这些参数添加到每个请求中?
我得到异常“http://api.openweathermap.org/data/2.5/weather?q=sydney”。有人能帮忙怎么用吗。当我粘贴以下内容时,可以很好地使用web浏览器 我也试过下面的组合,但没有运气
问题内容: 寻找一种在node中加密数据(主要是字符串)并在android应用(java)中解密的方法。 在每个节点中都成功做到了这一点(在节点中进行加密/解密,在Java中进行加密/解密),但是似乎无法使其在它们之间起作用。 可能我不是以相同的方式进行加密/解密,但是每种语言的每个库对于相同的事物都有不同的名称… 任何帮助表示赞赏。 这是一些代码:Node.js 和java 原始密钥是这样创建的