新裝了一台WSS主機,建了一些每天申報伺服器運作狀況的清單應用,交給User測試,卻發現User在使用時,輸入網域帳號密碼登入網頁後,操作幾下就會一直跳出帳號密碼登入對話框,即使輸入正確的帳號密碼也不管用,但有時連按十幾下又會成功。換了隔壁同事的主機也是如此,User被這種靈異現象搞到痛不欲生,但說也奇怪,用我的機器測試,卻總是一路順暢。

被這個詭異現象糾纏了一兩個星期,每天早上都要陪著User按個數十下登入確定鈕,等它老爺心情好給放行,不勝其擾。偏偏使用者用網域身份登入其他網站又都無異狀,問題出在哪,我毫無頭緒...

今天痛下決心要把鬼抓出來,由IIS Log看來,使用者似乎沒有通過IIS認證,用Process Monitor檢查,證實了這一點。試著連上_themes下的某個JPG,在不斷跳出登入視窗的當下,並沒有存取圖檔的記錄,顯示問題在IIS層次而非ASP.NET層次,而Request一開始就死在驗證失敗,未到後面的階段。

IIS Log上很難進一步了解身份認證過程的細節,我想到了另一件神奇兵刃--Fiddler 2。比對正常Client與異常Client的存取過程,我發現了一件有趣的事實: 正常Client透過NTLM進行驗證,而異常Client則用的是Kerberos(二者觀察上的差異可以參考這裡) 。

啊! 會出問題的Client機器均有加入WSS所在的AD Domain,換言之,Client與IIS位處於同一個Domain中;而我的機器則隸屬另一個Domain,大概就是如此造成Kerberos vs NTLM的差別。

問題既已分明,那就強迫用NTLM好了,我Google到這篇文章。由文中的細節,我推測Kerberos會失敗可能與WSS並非用Domain Account身份執行有關,但因為一些因素,暫不打算改變WSS的執行身份,於是我用以下的方法停用了Kerberos:

C:\Inetpub\AdminScripts>cscript adsutil.vbs GET W3SVC/1/Root/NTAuthenticationPro
viders

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

NTAuthenticationProviders       : (STRING) "Negotiate,NTLM"

C:\Inetpub\AdminScripts>cscript adsutil.vbs SET W3SVC/1/Root/NTAuthenticationPro
viders NTLM

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

NTAuthenticationProviders       : (STRING) "NTLM"

終於從惱人的登入對話框地獄解脫了...


Comments

# by ARCH

您真是太強了, 在建立DMZ的網站 (是相同網域不同網段), 也出現一樣問題, 用上述解法成功了, 謝謝^_^

# by 艾里克斯

Dear Sir: 我有"類似"的問題,在我們家的 Sharepoint 2010 會時好時壞,看過 Windows Authentication Providor 設定也都是設 NTLM, 所有 Client 也都在相同的 Domain, 但就是有些人會遇到輸不盡的帳密,真是詭異到極點呀...T_T

# by Jeffrey

to 艾里克斯, 有沒有可能問題出在Client的時間不準? (http://goo.gl/sj6p ) 這應該也是可以優先檢查的項目。

# by Alexsuper

Dear Jeffrey: 在我們公司內部有 Time Server 同步全公司的 PC 時間, 所以應不是這個問題, 目前已知的是大部份(也許是全部@@")是使用 ie8 才會遇到, 現有的解法是 down grade 成 ie7 暫時處理掉, 但感覺上好像不是正解呀...T_T

Post a comment