我有一組半公共REST API的,我們正在建立一個簡單的身份驗證方案:WCF基於REST的服務的身份驗證方案
/-----------------------\
| Client POST's ID/Pass |
| to an Auth Service |
\-----------------------/
[Client] ------------POST----------------------> [Service/Authenticate]
|
/-------------------------------\
| Service checks credentials |
[Client] <---------Session Cookie------- | and generates a session token |
| | in a cookie. |
| \-------------------------------/
|
[Client] -----------GET /w Cookie -------------> [Service/Something]
|
/----------------------------------\
| Client must pass session cookie |
| with each API request |
| or will get a 401. |
\----------------------------------/
這工作很好,因爲客戶端永遠不會需要做的只是得到了什麼一cookie,然後傳給它。對於瀏覽器應用程序,這是瀏覽器自動發生的,對於非瀏覽器應用程序,保存cookie並將其與每個請求一起發送非常簡單。
但是,我還沒有想出一個從瀏覽器應用程序進行初始握手的好方法。例如,如果這一切都是使用AJAX技術進行的,那麼阻止用戶訪問ID/Pass客戶端的用途是與服務握手?
這似乎是這是這種方法的唯一絆腳石,我很難過。
你到底想要保護什麼? 這聽起來像「客戶端」和「用戶」是不同的演員,你試圖掩蓋「客戶端」具有硬編碼憑證這一事實嗎? 如果「用戶」和「客戶端」對同一臺計算機具有相同的訪問權限,那麼現在就可以通過默默無聞的方式實現安全性。其次,對於API,如果您要使用身份驗證/授權方案,我強烈建議您考慮使用OAuth而不是自行創建。 – 2010-04-05 01:28:45
正確的說,客戶端是另一個想要使用我們內容的網站,他們可能希望通過REST/JSONP來完成這個客戶端。我想我的主要希望是能夠控制使用我們API的各種第三方。 – FlySwat 2010-04-05 01:33:44