我在内部Web应用程序中使用System.DirectoryServices.AccountManagement时遇到问题。该错误的描述性不是很高,但是这是发生了什么:
当我尝试验证AD中是否存在提供的用户ID时,请使用以下代码进行验证:
private bool IsWindowsIDValid(string strWindowsID)
{
var context = new PrincipalContext(ContextType.Domain, "DOMAINSERVER", "DC=DOMAINNAME,DC=net");
var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID);
return (userPrincipal != null);
}
但是,在第二行调用FindByIdentity时会引发异常。以下是异常详细信息:
信息:
“发生操作错误。”
堆栈跟踪:
在System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
在System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
在System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
在System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
在System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext上下文,类型PrincipalType,Nullable`1 identityType,字符串identityValue,DateTime refDate)
在System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext上下文,类型PrincipalType,字符串identityValue)
在System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext上下文,字符串identityValue)
位于*****。IsWindowsIDValid(String strWindowsID)在*****。ascx.cs:第193行
如果我也尝试检查PrincipalContext的ConnectedServer属性,则会发生相同的错误。但是,我可以尝试根据上下文验证凭据(使用context.ValidateCredentials()),它将通过。
关于可能会发生什么的任何想法?我可以在计算机上的独立控制台脚本中很好地运行此代码-当我尝试调试webapp时,这是在Visual Studio内部的本地开发环境中发生的。这是权限问题还是其他问题?在这一点上我很迷路。
感谢您的帮助!
-帕特里克
最佳答案
一个老问题,但是我有同样的错误。对我来说,问题在于PrincipalContext
在其构造函数中没有用户名和密码就无法工作...每当我调用UserPrincipal
的任何方法或属性(或在)。
如果您为要指定的容器指定具有Active Directory权限的域用户的用户名和密码,则对PrincipalContext
的调用应成功:
var context = new PrincipalContext(ContextType.Domain, "DOMAINSERVER",
"DC=DOMAINNAME,DC=net", userName, pw);
var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID);
对我来说,这不是解决方案,因为我没有这两个参数。但这就是为什么您遇到错误的原因。
根据Microsoft的帮助,以这种方式进行的操作应在调用过程的凭据下运行……但是无论我在谁的下面(并且我已经验证了模拟)在没有指定用户名的情况下调用
FindByIdentity
对象,并且其UserPrincipal
上的pw无效。希望能有所帮助
詹姆士
关于c# - ASP.NET Webapp中的FindByIdentity失败,出现PricipalOperationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1863801/