我正在設計一個以REST API爲中心的多平臺應用程序(客戶端將包括內部開發的移動應用程序,以及最初的AJAX重javascript客戶端)。由於將來API可能面向第三方開放,因此我正在考慮使用OAuth 2.0進行API驗證和授權。安全地將OAuth令牌與javascript客戶端進行通信
我想要解決一些與此安排有關的安全問題,特別是關於javascript客戶端。我不希望這個客戶端像第三方客戶端那樣行事,可能會有大量的重定向和彈出窗口以及大部分OAuth文檔似乎關注的內容。由於它將從我自己的域中交付,因此我認爲webapp的服務器端可以是實際的客戶端,並存儲客戶端機密和刷新標記,而javascript會根據需要從服務器中檢索新的認證令牌。
爲了把它在一步一步形式:
- 用戶登錄使用非Ajax的HTML表單,生成AUTH和刷新其上存儲服務器側令牌。這設置了一個僅HTTP的登錄會話cookie。
- JavaScript客戶端代碼在登錄後發送到用戶的瀏覽器。
- javascript客戶端向屬於其自己的應用程序(不是REST API的一部分)的資源發出請求以檢索令牌。會話cookie確保客戶端是真實的,並且引用者也將被檢查。 Auth令牌返回。
- javascript客戶端使用REST API驗證令牌。
- 客戶端現在可以使用該令牌在REST API過期前發出請求。
- 如果授權令牌到期或頁面關閉並重新打開,javascript客戶端可以請求新的令牌。只要登錄會話cookie仍然有效,webapp的服務器端負責刷新令牌併發送新令牌。
這是否有意義,還是會留下大量的漏洞?特別是,在網絡上有一個資源基於設置的cookie傳遞認證令牌是否瘋狂?
我打算使用SSL的一切正常,我應該提到。 – randomhuman 2013-03-13 11:53:56
我同意這個答案,並且正在考慮實施這種方法,但還有另一種值得一提的方法。 您可以使用來自JavaScript的「隱式」授權,然後使用訪問令牌撥回您的Web應用程序以生成會話Cookie。從那時起,會話cookie(與服務器端的訪問令牌綁定)將用於對Web應用進行認證,訪問令牌將用於對REST API進行認證。但是,如何在此處理刷新令牌(將其存儲在本地存儲中,可能嗎?)。 – 2013-11-25 17:36:34