2016-07-05 84 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