【发布时间】:2021-01-19 21:51:33
【问题描述】:
首先,抱歉我的英语不好,感谢您点击这个问题。
我只想制作使用来自其他 Web 服务器的 API 的 GUI 服务(不过是简单的 html)。
我的服务只提供向其他 API 请求的“html 按钮”。
所以我只是在 html 上编写了用于传输 APIkey 和 SecretKey 的 POST 方法表单。
我使用 'uuid'、'jsonwebtoken' 模块来处理 APIkey 和 Secretkey。 (API 提供者需要这个)
并且还使用“请求”模块来请求 API。
这是我的部分代码。
...
const request = require('request');
const { v4: uuidv4 } = require('uuid');
const sign = require('jsonwebtoken').sign
...
,(req, res)=>{
const access_key = req.keydata.apikey;
const secret_key = req.keydata.secret;
const server_url = "https://api.url.com";
const payload = {
access_key: access_key,
nonce: uuidv4(),
};
const token = sign(payload, secret_key);
const options = {
method: "GET",
url: server_url + "/v1/foo",
headers: {Authorization: `Bearer ${token}`},
}
request(options, (error, response, body) => {
if (error) throw new Error(error);
res.send(body);
})
...
但在这种方式下,不是客户端做的,而是我向其他 API 请求。
我想将请求者设置为客户端。不是我的服务器请求的方式。
我可以使用 APIkey 和 secKey 向客户端发送由我的服务器制作的“令牌”吗?
之后,客户端使用包含令牌的自定义标头对 API 执行 XHR。
这种方式有安全问题吗?
或者有没有其他方法可以改变请求者?
【问题讨论】: