pat*_*jbs 3 c# asp.net active-directory visual-studio
我在内部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);
}
Run Code Online (Sandbox Code Playgroud)
但是,在第二行抛出异常,其中调用FindByIdentity.以下是异常详细信息:
消息:"发生了操作错误."
堆栈跟踪:
在System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()在System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()在System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()在System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()在系统System.DirectoryServices上的System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context,Type principalType,String identityValue)中的.DirectoryServices.AccountManagement.Principal.FindBdentIdentityWithTypeHelper(PrincipalContext context,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate) .AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context,String identityValue)at*****.IsWindowsIDValid(String strWindowsID)in*****.ascx.cs:line 193
如果我尝试检查PrincipalContext的ConnectedServer属性,也会发生同样的错误.但是,我可以尝试根据上下文验证凭据(使用context.ValidateCredentials()),它将通过正常.
关于可能发生的事情的任何想法?我可以在我的机器上的独立控制台脚本中运行此代码 - 当我尝试调试webapp时,这发生在VisualStudio内部的本地开发环境中.这可能是权限问题还是其他问题?我在这一点上很丢失.
我感谢任何帮助!
-Patrick
一个老问题,但我有同样的错误.对我来说,问题是如果PrincipalContext没有用户名和密码在它的构造函数中不起作用......每当我调用UserPrincipal(或PrincipalContext就此而言)的任何方法或属性时,我都会得到完全相同的错误消息.
如果您指定具有Active Directory权限的域用户的用户名和密码,则该调用将FindByIdentity成功:
var context = new PrincipalContext(ContextType.Domain, "DOMAINSERVER",
"DC=DOMAINNAME,DC=net", userName, pw);
var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID);
Run Code Online (Sandbox Code Playgroud)
对我来说,这不是一个解决方案,因为我不会有这两个参数.但这就是为什么你得到了你得到的错误.
根据微软的帮助,按照你的方式运行它应该在调用进程的凭据下运行...但无论我运行的是谁(我已经验证了模拟)调用UserPrincipal对象而没有指定用户名和pw on它PrincipalContext只是不会工作.
詹姆斯,希望姗姗来迟
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |