2017-08-24 204 views
2

我正在构建一个使用公共API的电子应用程序(桌面)。现在我们都知道Javscript将会被所有人看到,并且我会丑化我的代码。我应该在电子应用程序中存储OAuth客户机密钥?

要进行API调用,我必须将客户端ID和客户端密钥传递给API提供程序。有了这两个键,任何人都可以模拟我并调用API。

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

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

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

想法请。 :)

+1

您是否想过在Electron应用程序中存储类似令牌的秘密方法? –

回答

0

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

+0

这不是通过创建另一个相同的问题来解决问题吗?现在,您需要确保访问您自己的服务器,以便不好的演员不要将您的服务器的代理呼叫到第三方API。如果你通过将秘密传递给你的服务器来实现这一点,你现在已经在你的电子应用程序中存储了这个秘密。 –

0

您可以创建三个文件devkey.js,prodkeys.js和keys.js. keys.js将根据您是否位于本地主机或产品中而需要devkeys或prodkey。下面是一个例子:

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文件中,以免将密钥推送到公共库。

相关问题