2017-08-24 82 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文件中,以免將密鑰推送到公共庫。

相關問題