2014-03-28 256 views
0

如果有人能幫助我,我會很感激。目前,我正在ASP.NET應用程序上實現一些jQuery AJAX方法,以將GET和POST數據發送到我們的服務器。我們希望對此進行某種形式的身份驗證,這種身份驗證非常輕量且相當快速。AJAX請求WCF服務身份驗證

當前每個AJAX請求都會將Forms Authentication cookie發送到我們的WCF服務,如Fiddler所示。當我們收到對我們WCF服務的請求時,它有一個解密Forms Authentication cookie的方法。目前只有當cookie不爲空且未過期時,它纔會給出數據響應。這工作正常,並且cookie的唯一存在方式是用戶已通過我們的安全登錄系統。

我想知道的是,這是否是確保我們的AJAX調用的有效形式,儘管是基本的。

模仿形式餅乾很容易嗎?是否有可能規避餅乾形式?任何建議,將不勝感激,因爲我在這裏有點超出我的深度。

編輯:我們目前有SSL和安全的HTTPS傳輸也啓用。

這裏是我們的代碼示例:

所有的
private bool AuthenticateAJAXRequest() 
{ 
    // assume user is not authenticated 
    bool authenticated = false; 
    if (HttpContext.Current != null) 
    { 
     if (HttpContext.Current.Request != null) 
     { 
      var authCookie = HttpContext.Current.Request.Cookies["authCookie"]; 
      if (authCookie != null) 
      { 
       FormsAuthenticationTicket fTicket = FormsAuthentication.Decrypt(authCookie.Value); 
       if (fTicket != null) 
       { 
        if (!fTicket.Expired) 
         authenticated = true; 
       } 
      } 
     } 
    } 
    return authenticated; 
} 

回答

1

首先,AJAX(XHR - XML HTTP請求)異步請求由「同源」的政策約束。這意味着瀏覽器會隱式地拒絕/限制對頁面發起者以外的服務器進行AJAX調用。 這需要處理跨域腳本攻擊。 (您仍然可以使用JSONp進行跨域異步調用或手動使用腳本標記,但這是一個完整的其他球類遊戲,不在當前的討論範圍內。) 從我收集的內容來看,如果您只是檢查cookie而不有一個回落,那麼你會遇到麻煩,因爲一些用戶可能已經在瀏覽器中關閉了cookies。相反,我建議使用可以爲每個用戶會話存儲和檢索的用戶級別唯一標識。將此唯一ID作爲每個Ajax請求的一部分發送,並根據服務器上的數據存儲(緩存或保留)對其進行驗證。通過這種方式,您可以放心,無論Cookie如何,該系統仍可正常工作。另外,請確保在用戶註銷後銷燬唯一標識,這樣以後的任何請求(整個頁面或Ajax)都不會被滿足。 希望這回答你的問題。

+0

感謝您的回覆。域名問題沒有任何問題,因爲我們的服務和網站託管在同一個域名上,我們測試了他們的工作。至於餅乾,我們的網站受衆不會很大,它更像是一個用戶門戶而不是網站。目前的實現已經使用了cookie,還有一大堆的JavaScript。我們已經對我們未來的測試人員說過,他們需要啓用cookie和JScript才能使用該站點。關於這些獨特的ID,你將如何獲得分配給用戶的唯一ID?他們的提供者密鑰或者是其他東西。 – MightyLampshade