我有一些Ruby Web應用程序使用OpenID進行身份驗證並將會話存儲在cookie中。有一些API和AJAX相關的東西,我的Ruby框架並不適合,所以我有一些node.js服務。問題是,如果有人知道我的AJAX服務的URL,他們基本上將公開向公衆開放。目前這些服務對Origin標頭進行了簡單的檢查,但顯然這很容易僞造。有沒有處理跨框架認證的標準方法?
因此,我希望能夠限制對運行在Node(或Python,或基於非Rack的Ruby服務或其他任何服務)上的服務對登錄到運行的「主」服務的用戶的訪問通過基於Rack的Web應用程序。這種事情是如何完成的?我見過大量的網站將通過example.com
提供內容和網頁,然後通過api.example.com
獲得AJAX電話,所以我很驚訝,這是我沒有讀到的東西。
我有如何做到這一點的想法,我很想對我是否失去了一些東西言自明,使這個不安全的一些反饋:
我Ruby的web應用程序使用OpenID認證和商店在會話cookie中使用Rack::Session
進行會話。從看Rack::Session
源,我的框架似乎要經歷這個過程:
- 生成我的用戶對象
- 的元帥轉儲基於密鑰
- 商店元帥的SHA1哈希十六進制在cookie消化SHA1哈希的
所以理論上我可以有預先安排的鍵或系統用於產生密鑰,或框架之間的一些消息傳遞通過安全信道來共享密鑰。然後我可以在任何想要驗證會話數據的框架中反轉加密過程。當然,我不得不擺脫第一步,只存儲JSON數據或其他內容,而不是Ruby對象以實現跨語言兼容性。
這是否被認爲是一種安全的做事方式,假設共享密鑰的協議是否適當安全?
您的機架服務器將會話存儲在數據庫中並將該ID放入Cookie中。您的所有節點服務器必須執行的操作是從Cookie中讀取ID,查看數據庫中的會話並檢查該會話是否經過授權。 – Raynos 2012-01-01 14:01:37
這是真的嗎?從這裏http://rack.rubyforge.org/doc/Rack/Session/Cookie.html查看源代碼,它是所有客戶端存儲 - 因此我認爲這是加密。難道一個持久的數據庫不會像Rack這樣輕量級的設備出現性能問題?並打破跨服務器負載平衡? – Cera 2012-01-01 15:09:16
其實,我認爲我可能誤解了你的評論,因爲你建議它已經以這種方式工作,而不是我以這種方式實施。 我認爲,但問題是我有一個可擴展性問題,必須使該數據庫在負載平衡的虛擬服務器中保持不變,並且必須擔心保護這些數據庫。另外,似乎沒有任何安全措施可以防止cookie中僞造的ID? – Cera 2012-01-01 15:10:37