【问题标题】:Can I set requestor as not my own server but Client on nodeJS?我可以设置请求者不是我自己的服务器而是节点 JS 上的客户端吗?
【发布时间】: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。

这种方式有安全问题吗?

或者有没有其他方法可以改变请求者?

【问题讨论】:

    标签: node.js api request


    【解决方案1】:

    我可以使用 APIkey 和 secKey 向客户端发送我的服务器生成的“令牌”吗?

    是的。事实上,这是相当普遍的,经常做的事情。 (例如,AWS S3 的用户将签署 URL 并将其发送给客户端。客户端实际上会直接向 S3 发出请求。)

    您可以简单地使用 JSON 来返回客户端应该使用的 URL 和标头。

    之后,客户端使用包含令牌的自定义标头对 API 执行 XHR。

    您可以根据需要使用 XHR,但请查看 Fetch API。它更易于使用,并且受到浏览器的良好支持。

    这种方式有安全问题吗?

    不是真的。只要确保您在任何地方都使用 HTTPS,这样您的签名 URL 就不会被其他人截获和使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2012-03-30
      • 2012-09-22
      • 1970-01-01
      • 2016-06-20
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多