2016-07-05 83 views
0

我正在嘗試使用下面的代碼驗證主體上下文的憑證。但它給錯誤「服務器無法處理目錄請求」。驗證主體上下文的憑證

principalContext.ValidateCredentials("Username", "Password"); 

做了一些互聯網搜索後,我才知道我需要傳遞另一個參數ContextOptions才能使它工作。

我發現這個鏈接來解決問題

.Net's Directory Services throws a strange exception

principalContext.ValidateCredentials("Username", "Password", ContextOptions.Negotiate); 

這是工作。但我無法理解根本原因。如果任何人都可以詳細解釋它,那麼這將非常有幫助。

回答

-1

從你在這裏描述的,結果應該真的取決於你的AD環境。

協商 - 客戶端通過使用Kerberos或NTLM認證。如果未提供用戶名和密碼,則帳戶管理API將使用調用線程的安全上下文綁定到對象,該線程是應用程序運行時的用戶帳戶的安全上下文或客戶端用戶帳戶的安全上下文調用線程表示。

你可以看到ContextOptions的定義從這裏:

https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.contextoptions(v=vs.110).aspx

+1

一個解決方案的鏈接是值得歡迎的,但請確保你的答案沒有它是有用的:[添加背景周圍的鏈接](/ /meta.stackexchange.com/a/8259),這樣你的同行用戶就會知道它是什麼以及它爲什麼存在,然後引用鏈接的頁面中最相關的部分,以防目標頁面不可用。 [僅僅是一個鏈接的答案可能會被刪除。](// stackoverflow.com/help/deleted-answers) – FelixSFD

+0

但是我提供了用戶名和密碼!我仍然必須通過上下文選項,這是我無法理解的。 – Bhargav

+0

該參數是可選的。它有另一種沒有ContextOptions的方法。 https://msdn.microsoft.com/en-us/library/bb154889(v=vs.110).aspx – wannadream