Reactjs 如果在React中将API密钥存储在环境变量中是不安全的,那么如何检索该密钥以便访问AWS API网关上的端点?

Reactjs 如果在React中将API密钥存储在环境变量中是不安全的,那么如何检索该密钥以便访问AWS API网关上的端点?,reactjs,aws-api-gateway,Reactjs,Aws Api Gateway,AWS API网关上的My endpoints要求在标头中传递此密钥,以便客户端成功地访问我的后端端点 下面是我的axios.js文件,它为GET/POST/PUT/DELETE设置了axios实例 import axios from 'axios' require('dotenv').config() const API_URL = process.env.REACT_APP_AWS_APIGATEWAY_BASE_URL const API_KEY = process.env.REAC

AWS API网关上的My endpoints要求在标头中传递此密钥,以便客户端成功地访问我的后端端点

下面是我的
axios.js
文件,它为GET/POST/PUT/DELETE设置了axios实例

import axios from 'axios'  
require('dotenv').config()

const API_URL = process.env.REACT_APP_AWS_APIGATEWAY_BASE_URL
const API_KEY = process.env.REACT_APP_AWS_APIGATEWAY_API_KEY


const AxiosInstance = axios.create({
    baseURL: API_URL,  
    headers : {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        'Authorization' : API_KEY,
        'X-API-KEY': API_KEY
    }
});

const getAPI = (apiUrl,params) => AxiosInstance.get(apiUrl,params);

const postAPI = (apiUrl, data,params) => AxiosInstance.post(apiUrl, data,params);

const putAPI = (apiUrl, data,params) => AxiosInstance.put(apiUrl, data,params);

const deleteAPI = (apiUrl,data,params) => AxiosInstance.delete(apiUrl,data,params);

export { 
    postAPI,
    getAPI,
    putAPI,
    deleteAPI,
    API_URL
};
export default AxiosInstance;

你的应用程序有用户吗

如果是这样,您应该实现某种身份验证/授权逻辑


如果不是,并且允许开放Internet上的每个人自由调用这些API方法,我想您可以考虑建立一个微服务,在请求时将返回<代码> ApIIKEKEY/代码>,并将其存储在客户端的存储中(LoalSturt >浏览器等)。微服务可以通过AWS Lambda函数/Firebase云函数来实现,它们运行起来非常便宜,而且显然可以使用自己的环境变量从中检索

API\u键。

API键的目的是让有人不会不必要地点击我的端点。它只能通过与我的网站交互来触发。拥有一个返回API密钥的端点似乎没有什么帮助,可以说,如果有人真的想“做坏事”,而不是通过浏览器,而是通过Postman这样的服务,那么一个未旋转的
API\u密钥
会有所不同吗?所以,我要说的是,至少实现某种类型的键旋转,每个键在一天或几天内过期。对我来说,如果一个端点可以像那样被击中,这是非常危险的,特别是当服务器逻辑操作数据库时。或者在服务器上以某种方式实现一些去抖动/阻塞,以最大限度地减少来自某个IP地址的滥用。我想有很多解决方案。那么API密钥是否毫无意义呢?总比什么都没有好,但如果你的潜在攻击者至少有点老练的话,就不会有太多。也许不是严格意义上的默默无闻的安全,但不是非常有效的安全。