2011-01-08 39 views
3

假設我有一個很長的輪詢服務器,它應該可以工作 - 當新客戶端連接到網站時(他只是作爲匿名身份進行連接而無需身份驗證),就會發布並存儲新的GUID在簽名的cookie中,在客戶端和服務器之間的輪詢期間標識此連接。長輪詢服務器原理(客戶端認證)

現在客戶端想要登錄並繼續作爲已認證的用戶。問題在於長查詢服務器(node.js)和Web框架(ASP.NET)作爲獨立系統運行。我可以使用ASP.NET(MVC)特定的身份驗證機制從Web框架的角度登錄,但這不會影響長時間輪詢服務器(我仍稱爲某個GUID人員)。我應該如何安全地從長輪詢服務器的角度來驗證用戶?這種情況下是否有任何「最佳做法」?經過身份驗證的客戶端應在身份驗證過程後,通過其唯一密鑰進行進一步身份驗證(例如,使用郵件地址而不是GUID)。

回答

2

一瘦我能想象:

  1. 問題會話ID,要麼使用ASP.net的東西,或者發出額外的一個,你可能需要掛接到ASP.net身份驗證時它無效需要 -
  2. 當進行長輪詢時,一定要發送cookie,以便Node.js服務器接收它。
  3. 將GUID保存到可以從ASP和Node.js訪問的數據庫。

其餘的應該很清楚,對於其數據塊,你可以使用,我沒有任何經驗,但有一個DB相當的很多包裝的Node.js的,雖然其中不少是沒有維護或功能不完整。

您應該查看Node.js wiki中的database listing並查看每一個,不要忘記在Google上搜索它並檢查問題,看看在使用它之前是否有大的缺失。

哦,另一個(DBless)解決方案,如雨後春筍般在我的腦海:

  1. 通過ASP.net執行權威性
  2. 當Node.js的接收AUTH餅乾,它們轉發到一個特殊的ASP.net頁(你可以使它只能從本地主機訪問),它只是告訴Node.js這個請求是否有效(它也可以給Node.js一些用戶數據)
  3. 只有當請求有效時,開始長輪詢

在同一臺服務器上完成時,幾乎不會引入任何延遲。

+0

感謝您的想法。我也在首先考慮共享DB解決方案。第二個解決方案聽起來很有趣,特別是可以返回當前經過身份驗證的用戶標識(ASP.NET User.Identity.Name屬性)的localhost頁面。 – yojimbo87 2011-01-09 11:30:28

2

我目前所面臨的同樣的問題,這裏是我會怎麼做:

我有在Java中,供應的API,以我的Web客戶端一個REST服務器。對於長時間輪詢,我寫了一個小型的node.js服務器。

  1. 客戶端連接到發送用戶名/密碼(通過HTTPS)的node.js。您還可以傳遞會話令牌。
  2. node.js調用REST服務器以授予給定憑證的用戶身份
  3. 如果用戶是經過身份驗證的節點。js等待或發送401否則

好處是,node.js服務器不需要知道關於數據庫結構的任何內容,不需要包含sql調用。如果你願意,這也允許用Python扭曲來重寫服務器。