我正在构建一个使用公共API的电子应用(桌面)。现在我们都知道所有人都可以看到Javscript,我将对我的代码进行修改。
要进行API调用,我必须将client-id和client-secret传递给API提供程序。有了这两个键,任何人都可以冒充我并调用API。
到目前为止,我一直在使用编译的编程环境,因此获取此信息更难。在这种情况下,当我使用Javascript创建桌面应用程序时,您会推荐什么,并且客户端密钥将在那里。
我们可以做些什么来完成这项工作?
在我自己的服务器上调用代码来获取这些数据,我想不出任何其他方式可以安全地存储客户端密码。
想法。 :)
答案 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代码,并且永远不会从黑盒外围导出秘密。