当前位置: 首页 > 面试题库 >

在React应用中使用API​​密钥

饶志
2023-03-14
问题内容

我有一个使用两个第三方服务的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 原始密钥是这样创建的