我应该在哪里将OAuth客户端密钥存储在电子应用程序中?

时间:2017-08-24 17:56:49

标签: node.js electron

我正在构建一个使用公共API的电子应用(桌面)。现在我们都知道所有人都可以看到Javscript,我将对我的代码进行修改。

要进行API调用,我必须将client-id和client-secret传递给API提供程序。有了这两个键,任何人都可以冒充我并调用API。

到目前为止,我一直在使用编译的编程环境,因此获取此信息更难。在这种情况下,当我使用Javascript创建桌面应用程序时,您会推荐什么,并且客户端密钥将在那里。

我们可以做些什么来完成这项工作?

在我自己的服务器上调用代码来获取这些数据,我想不出任何其他方式可以安全地存储客户端密码。

想法。 :)

3 个答案:

答案 0 :(得分:0)

如果您使用的是任何第三方服务/ API,则无法公开客户端ID和密码。您必须通过自己的服务器路由这些请求。此外,很少有auth解决方案检查并验证请求的源/ IP地址。如果此类请求来自随机客户端IP,则可能完全拒绝它。

答案 1 :(得分:0)

您可以创建三个文件devkey.js,prodkeys.js和keys.js. keys.js将根据您是在本地主机还是生产中而需要devkeys或prodkeys。这是一个例子:

<强> devkeys.js

module.exports = {
  MONGO_URL: "mongodb://blahblah",
  REDIS_URL: "redis://blahblah"
};

<强> prodkeys.js

module.exports = {
  MONGO_URL: process.env.MONGO_URL,
  REDIS_URL: process.env.REDIS_URL
};

<强> keys.js

module.exports =
  process.env.NODE_ENV === "production"
    ? require("./prodkeys")
    : require("./devkeys");

然后只需要代码中的keys.js,并将正确的密钥加载到环境中。要使代码在服务器上正常工作,您必须在服务器上将密钥添加为环境变量。还要将devkeys.js添加到.gitignore文件中,这样就不会将密钥推到公共仓库。

答案 2 :(得分:0)

为此使用bytenode:黑盒底层API代码,并且永远不会从黑盒外围导出秘密。