2017-04-08 209 views
1

我正在爲我的移動客戶端添加一些web api項目(使用mvc web api)。我正在爲用戶使用OWIN和持票人令牌(密碼准許類型)身份驗證,就我而言,這是用戶身份驗證和資源授權的最佳做法,,但我的問題是我如何驗證客戶端(使用標準化方法),以便只有真實和真實的客戶端才能訪問服務甚至匿名服務)Web Api客戶端身份驗證(非用戶身份驗證)最佳實踐

例如我們有兩種類型的客戶端Android和iOS應用中,只有這兩個必須能訪問網頁API

這樣做的最佳解決方案(實踐)是什麼,owin是否有任何解決方案?

什麼我試過到目前爲止產生了對每個客戶端和版本公鑰和給的鑰匙,我們的移動開發者,他們插上密鑰的證書內,在每個請求發送鍵

這裏是一個Android客戶端

"StoreFrontType" : "AndroidApp" 
"StoreFrontVersion" : "1.0.0.0" 
"Client_Token" : "1vnM/XHDmIfv1yhftbnCnc8R92vRhSBBsciKzyHEVYmAI2bTpHqWsgmVBGel6Rd" 

我進行了交談與我們的移動開發者,他們說,這種方法比不過更好不夠安全因爲移動應用關鍵的一個例子(特別是android)源代碼和證書可以反編譯和易於閱讀因此,使用我的方法不夠安全,因爲通過這種方法,如果某人獲得公鑰(通過反編譯源代碼或讀取證書),他們可以發送請求並他們會被稱爲一個有效的客戶端

任何幫助,將不勝感激

回答

1

這取決於你的威脅模型是什麼。這個問題沒有完美的解決方案。您不能相信移動設備保密,任何將設備標識爲可信的客戶端。

如果您的移動客戶端的合法用戶想要將標識該設備的令牌/祕密作爲受信任的客戶端,他/她將能夠。然後,他們可以將標識符和令牌分發給任何人,然後他們可以將其標識爲合法客戶。

如果這不是您真正關心的問題,您可以使用OAuth2 client credentials flow。 OAuth2定義客戶端憑據流,以便客戶端以自己的名義獲取訪問令牌,但此流程僅適用於可信客戶端(即駐留在服務器上的Web應用程序)。