隐藏 API 密钥

我需要在多个地方调用 JSON API。有时,我需要提供 API 密钥——因此我会在管理仪表板上生成一个,并将其包含在 API 调用中。例如:

var token = [API KEY]
$.ajax({
     url: 'https://myforum.com/groups/[groupname].json',
      contentType: "application/json",
      headers: {
          "Api-Key": token,
          "Api-Username": "[username]"
        },
        dataType: 'json',
        success: function(result){
             console.log('result = ' + result);
         }
})

有没有办法保护这个密钥,使其对用户不可见?

目前,我的解决方案是让此函数在 Discourse 应用之外执行——即我的应用会调用另一个端点,该端点再调用此函数。这样,API 密钥就存储在一个与 Discourse 应用分离的函数中,而我的应用只知道该端点。

但是,如果我能将这个函数直接包含在 Discourse 应用中(例如在主题或插件中),会更简洁。但在我看来,无论怎么做,只要它是代码的一部分,用户就能看到 API 密钥。

有没有办法隐藏 API 密钥?

任何执行敏感 API 请求的应用程序都应在后端而非前端进行这些操作。

这样可以获得诸多优势,例如自定义缓存、并行 API 调用、安全性等。在客户端运行的 JavaScript 代码中执行此类操作并非明智之举。

4 个赞

谢谢。我已经搭建了一个后端结构来处理 API 请求,但它与我的 Discourse 实例是分离的(完全没有连接到 Discourse)。有没有办法让这个过程直接在 Discourse 应用的后端发生?

我猜这取决于你的 Discourse 实例是如何以及在哪里托管的。对于托管在 discourse.org 上的应用,是否有办法链接到其后端?

您需要以插件形式在 Rails 中构建它,并选择允许添加第三方插件的套餐。

2 个赞