2012-10-17 66 views
0

我目前在我的mvc4應用程序中實現web api,並且有關於驗證Web api服務的調用者的問題。第三方的web api驗證和javascript

在我的web應用程序中,web api將被用於2個不同的原因。首先,我的JavaScript與服務器通信,其次是第三方組件與我的應用程序進行通信。

因此,我想認證服務的調用者。在呼叫者的頭部中傳遞用戶名和密碼是直接的,但頭部可能會被非法人員嗅探到。如果我使服務https,這將防止這種情況,但它會導致我的js在富應用程序中調用它的性能問題。

我已經看過網絡上的例子,但無法找到解決方案,因爲它涵蓋了mt場景並保護我的服務。我有興趣聽到如何解決這個問題的建議?例如,現有公司如何確保他們的服務,即Twitter。我想確保我的服務,允許的第三方和我的JavaScript。請教育我!

回答

0

做到這一點的一種方法是使用數字簽名。客戶端計算請求數據的散列(POST或GET參數)並用密鑰簽名散列,將簽名放入請求標頭中。服務器然後驗證簽名散列。

爲防止重放攻擊,您希望每個請求都包含一個永遠不會被重用的臨時值。這通常是作爲一個不斷增加的整數值(例如時間戳)實現的,其中服務器存儲給定密鑰的最後一次使用的值並拒絕允許數目小於最後使用值的請求。

有兩種常見的方法可以實現這一點,一種方法是使用HMAC簽名,其中客戶端和服務器共享用於簽名請求的共同「祕密」(密鑰)。這很簡單,但需要將祕密存儲在服務器上(並適當地保護它們)。

第二種方法是使用非對稱密鑰(例如RSA),其中客戶端用他們的私鑰簽署請求並用他們的公鑰驗證簽名。這稍微複雜一些,但並不要求您在服務器上存儲和保護私鑰 - 只有客戶端需要擁有該密鑰。

+0

感謝您提供有關此信息 - 我如何實現這樣的JavaScript調用? – amateur

+0

@amateur - 不知道爲什麼你需要這樣做的JavaScript調用。來自Javascript的AJAX調用應該在用戶會話的上下文中完成。由於用戶可能已經登錄到網站,並且您已經在會話中爲他們創建了身份驗證令牌,爲什麼還需要再次驗證它們? –

+0

感謝您的回覆。用戶可能沒有登錄到該網站,用戶可以在不登錄的情況下瀏覽該網站。因此,試圖從這個方面獲得保護? – amateur