2010-01-27 18 views
2

我有一個Web部件,在實現UI時大量使用JavaScript。它還利用對某些SharePoint Web服務的異步XmlHttpRequest請求(我正在使用SPServices,btw)。ajax發佈到由ntlm中斷的SharePoint Web服務挑戰

對於某些請求,用戶面臨NTLM身份驗證挑戰,輸入憑據後,請求完成。雖然有3個以上的請求,但在一次頁面加載時會發生3次。有關於這幾件事情,我感到迷惑:

  • 我說,不是所有的請求有這個問題
  • 已經訪問使用NTLM身份驗證的網站,所以用戶爲什麼Ajax請求得到質疑?
  • 這是在Windows域環境中。在非域環境中,此問題不存在(儘管Windows身份驗證正在使用)。

當然,所有這些都在IE中。我嘗試過的一件事是將NTLM身份驗證頭插入到ajax請求中,但這並沒有改變任何東西(我真的沒有想到會這樣,但值得一試)。

有什麼建議嗎?

回答

1

它不應該是這樣。 Windows身份驗證是按進程進行的,如果您已經通過身份驗證,則當您再次加載某些內容時,您將保持身份驗證狀態,這與瀏覽器的主連接或XHR請求無關。

我在我們的一個測試服務器上看到了這種奇怪的行爲。在這種情況下,WebDAV對SharePoint的訪問也被破壞,有時您無法訪問\\sharepointserver\sites\somesite路徑(但幾分鐘後您可以再次執行此操作)。似乎在這種情況下Kerberos身份驗證存在問題,並且有時會發布錯誤的令牌。但是,我們沒有解決這個問題,只是安裝了一個新的服務器並附加了內容數據庫。這工作:-)

+0

是的 - 我沒有最終找出這一個,而是刪除了特定的Web服務調用。它很可能是由於Kerberos配置錯誤導致的,但我可能永遠不知道:-) – 2010-01-28 19:29:57

0

此問題是由於HTTP1.1會話超時。 當您第一次登錄到您的NTLM身份驗證站點時,HTTP會話已打開。此會話已通過身份驗證,並且您在此會話處於打開狀態時所做的每個請求都將自動通過會話的NTLM令牌進行身份驗證。 現在,當您創建XmlHttpRequest時,如果HTTP會話仍處於打開狀態,那麼您的請求不會要求進行任何身份驗證,因爲它已準備好。 但是,如果會話過期或以某種方式關閉。然後你會被提示登錄。 爲了更好地理解,只需快速搜索HTTP1.1協議,就可以更好地瞭解我在說什麼。

1

的Internet Explorer會記住它NTLM身份驗證到一個站點。如果有人要求POST到該網站,它將期望該網站重新認證它。如果網站沒有,瀏覽器將不會在帖子正文中發送任何細節。