哪些選項可用於要由來自另一個域jQuery的應用程序所消耗的MVC3的Web API應用的認證?的ASP.NET Web API認證選項
這裏有約束/事到目前爲止,我已經試過: -
- 我不想使用OAuth;與有限的用戶羣的專用應用我不能指望最終用戶對現有供應商的賬戶,也沒有範圍,以實現自己的
- 我有一個全功能的HMAC-SHA256 FPGA實現使用中傳遞的數據就好了工作頭;但是,這並不在IE工作,因爲在CORS IE8/9壞了,不允許你送頭
- 我需要跨域的消費應用程序是在不同的域的API,但不能使用JSONP監守它不允許你使用頁眉
- 我想避免令牌(只)爲基礎的方法,因爲這是開放給重播並且通過狀態
在這一點違反了REST我辭去了HMAC-SHA256方法,它使用URL或querystring/post來提供哈希和其他變量。
在URL中把這些變量似乎只是髒了,並把它們在查詢字符串/後是一種痛苦。
我成功使用JQuery $ .ajaxSetup beforeSend選項來生成哈希並將其附加到標頭,但正如我所提到的,您不能在IE8/9中使用標頭。
現在我不得不求助於$ .ajaxPrefilter,因爲我無法更改beforeSend中的ajax數據,也無法只擴展$ .ajaxSetup中的數據,因爲我需要基於ajax查詢的類型。 $ .ajaxPrefilter也是一個問題,因爲沒有乾淨/簡單的方法來添加所需的變量,這是方法不可知的方式...即它必須是查詢字符串的GET和formdata的POST
我必須失去了一些東西,因爲我無法找到一個解決方案: - 一)支持跨域 一)不能同時在MVC和JQuery雙方 下的大規模黑客攻擊)實際上安全 d)與IE8的工作/ 9
有有是有人在那裏做這個正確...
編輯
爲了澄清,在API方面的認證機制是好的...不管我驗證請求哪種方式我產生的GenericPrincipal並使用該API中(這樣做的優點是另一個職位,但它確實讓我使用MVC的標準授權機制,這是我喜歡我自己的滾動...少對其他開發人員對我的API來學習和維護)
問題在於primarly在認證信息從客戶端傳輸到API: - - 它不能依賴於服務器/ API狀態。所以我不能在一次調用中傳遞用戶名/密碼,取回令牌,然後繼續使用該令牌(打開重播攻擊) - 任何需要使用請求頭的東西都沒有了,因爲IE使用XDR而不是XHR其餘的瀏覽器,它不支持自定義標題(我知道IE10支持XHR,但實際上我需要IE8 +支持) - 我想我堅持生成一個HMAC並將它傳遞到URL的某處(路徑或查詢字符串)但這看起來像一個黑客,因爲我使用的請求的部分不是爲此設計的 - 如果我使用路徑有很多混亂的解析,因爲至少我必須傳遞用戶名,時間戳和散列與每個請求;這些需要以某種方式進行分隔,我幾乎不能控制在其他地方使用的分隔符 - 如果我使用數據(querystring/formdata),我需要根據方法I更改我發送認證詳細信息的位置使用(formdata POST/PUT/etc和查詢字符串GET),我也用這些變量來應用層數據空間
儘管它不好,querystring/formdata似乎是最好的選擇;但是現在我必須弄清楚如何在每個請求上捕獲這些信息。我可以使用MessageHandler或Filter,但既不能提供便捷的方式來訪問formdata。
我知道我可以只寫所有的分析和處理自己的東西(它看起來像我這樣),但關鍵是我不相信有沒有一個解決方案了。這就像我有(1)對IE的支持,(2)安全和(3)乾淨的代碼,我只能選擇兩個。
Ameen,我同意你的評估,即某些要求似乎不合理,而且「不能擁有一切」。所有這些要求*一起*只會提供很少的選擇,可能沒有? @Aleks - 爲什麼不只是ASP.NET表單身份驗證?除了是一個令牌之外,它滿足您的所有其他要求。至於重播攻擊,我不確定其他方法如何更好地防止這種攻擊?例如基本身份驗證將更容易重播(或徹底的數據包嗅探)。 – Snixtor 2013-02-23 21:37:02
+1作爲關於客戶端簽名的評論。這個問題確實意味着執行哈希的祕密實際上是在JavaScript中。 – 2013-02-23 21:43:59
所有的有效積分... ...回覆: - 回覆OAuth ...雖然我確實可以使用Azure之類的東西,但它增加了另一個我無法控制的外部系統。我有一些非常關注安全性的客戶,這增加了不必要的複雜性; OAuth似乎對我想要達到的目標有點矯枉過正;但它是一個有效的選項 – Aleks 2013-02-23 23:46:59