Active Directory 服務介面 WinNT 提供者的使用者驗證問題
本文說明 Active Directory 服務介面 (ADSI) WinNT 提供者的使用者驗證問題。
套用於:Windows 10 - 所有版本
原始 KB 編號: 218497
摘要
ADSI OpenDsObject 方法或 ADsOpenDsObject C 協助程式函式可讓您在開啟物件時提供目錄伺服器的驗證認證。 當您搭配 Active Directory 服務介面 WinNT 提供者使用這項技術時,應該注意許多問題。
其他相關資訊
Active Directory 服務介面 WinNT 提供者會使用 WNetAddConnection2 函式來連接 \\servername\IPC$,以便與遠端伺服器建立這些認證。 此方法很有用,因為它不需要NT用戶端的特殊許可權,而且可在Windows上運作,而且支援跨不受信任的網域進行驗證。
不幸的是,WNetAddConnection2 函式固有數個缺點,如下所示:
如果用戶端電腦上執行的任何進程已經建立任何連線至目標伺服器, WNetAddConnection2 函式就無法在用於現有連線的任何認證下建立新的連線。
如果您嘗試驗證新的帳戶,您將會收到衝突的認證錯誤。 如果您嘗試驗證現有的帳戶,任何密碼都會有效(有效或無效)。 當您從許多系統進程建立與域控制器連線的域控制器取得物件時,這是一個特別的問題。
如果目的地計算機上已啟用來賓帳戶,可以同時傳遞無效的使用者名稱和密碼,並建立連線。
因此,如果包含 Active Directory 服務介面客戶端進程的任何進程刪除連線,系統不會參考計數連線,則所有使用該連線的進程都必須在找到連線時將其重新建立。
當您使用 WinNT 提供者時,建議您在執行 Active Directory 服務介面程式代碼之前,先登入具有適當認證的網域帳戶或使用 LogonUser 函式(需要提高許可權),向目標伺服器進行驗證。 我們也建議您不要使用 Active Directory 服務介面 OpenDsObject 方法,在用戶端電腦信任的任何網域上驗證用戶的認證。
如果您嘗試驗證來自不受信任網域的帳戶,請使用 Active Directory 服務介面 OpenDsObject 方法,記住上述問題,並瞭解您將透過網路傳送未加密的密碼。 您可以使用 SSL (或 HTTPS) 連線,在每組不受信任的網域中,至少在一部伺服器上執行驗證程式代碼即服務來克服這些限制,以提供加密。 在每組不受信任的網域中使用 IIS 伺服器上的驗證.asp檔案,並使用基本身份驗證透過 HTTPS 連線到它來完成此作業。
Active Directory 服務介面 OpenDsObject 方法會使用登入使用者的認證來存取 IIS。 系統會忽略指定為參數的用戶名稱和密碼。 您收到下列錯誤訊息:
拒絕存取
不過,它會在用戶端登入的使用者新增至伺服器的 Administrators 群組之後運作。
如果您使用下列文本程序代碼,它也會運作。
Set objLogon = CreateObject("LoginAdmin.ImpersonateUser")
objLogon.Logon "Administrator", "AdminPassword", "Machinename"
Set oNS = GetObject("IIS:")
Set oRoot = oNS.OpenDSObject("IIS://SERVER/SHARE", "Mordor\administrator", "Gollum", 1)'User credentials are ignored
objLogon.Logoff
Set objLogon = Nothing