隐藏 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 代码中执行此类操作并非明智之举。

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

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

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