2011-08-16 27 views
4

這可能是最基本的問題,出於某種原因,但我有點傻眼。我正在設計一個有多個頁面的寧靜服務。點擊一個默認鏈接會觸發一個HTTP GET如何在RESTful系統中通過HTTP GET請求傳遞授權數據?

現在如何如何使用獲取請求發送授權數據?它應該是url的一部分嗎?我將被迫使用加密的查詢參數創建一個醜陋的網址。有什麼辦法可以避免這種情況?

有沒有什麼在JavaScript/jQuery中可以發送這個數據'引擎蓋',可以這麼說?

在JQuery中,$.ajax方法需要username, password作爲參數,以便授權數據可以與ajax調用一起發送。任何等價於非Ajax調用的東西,還是隻剩下URL?

之所以有這樣的方法:

  • 我希望用戶能夠點擊「後退按鈕」,然後返回到前一個頁面。如果我在授權下做了$.get,然後跟着$('html').replaceWith(result),它會禁用後退按鈕,對不對? (即不顯示任何東西)

這也許應該是一個REST 101,但由於某種原因,它讓我走投無路

(FYI:技術:jQuery的/的JavaScript /的Restlet/Freemarker的)

( PS:Cookies作爲最後的手段嗎?或者它們是最好的方式?:)

回答

2

使用GET請求,您僅限於請求標頭和請求的查詢字符串/網址。您可以使用HMAC方法或OAUTH,其中每個請求都是「簽名」的。如果你這樣做純粹是客戶端,那麼共享祕密就不再是祕密了。

當然,這聽起來像你已經正在使用的用戶名和密碼(我強烈勸阻,BTW)

如果你想在行動HMAC的例子POST請求,我相信亞馬遜做(或)使用HMAC與S3進行交互,所以有很多示例代碼。

最終,要讓網絡客戶端在不公開某些「祕密」信息(例如密碼或私鑰/令牌)的情況下進行無狀態身份驗證非常困難。您可以向用戶頒發臨時令牌,然後通過驗證請求頭(IP地址等)在令牌生命週期內是否一致來備份。如果您向客戶公開臨時令牌,則可能需要您的驗證機制爲每個請求包含一個唯一的nonce

完全無狀態的RESTful認證是不平凡的,如果你想在網絡客戶端做的要求,所以我不會把它REST 101 :)

+0

如果我僅限於請求頭,那麼如何我可以在獲取請求中設置WWW-Authorization ...標題嗎?這正是我想要做的。順便說一句,我沒有使用用戶名/密碼發出POST請求,但這些基本上都是「簽名」的字段,供服務器對客戶端進行身份驗證。臨時解決方案 – PhD

+0

@Nupul將'headers'和'beforeSend'選項簽出到jQuery.ajax() – Matt

相關問題