gpt4 book ai didi

c# - FindByIdentity 在 ASP.NET webapp 中因 PricipalOperationException 而失败

转载 作者:行者123 更新时间:2023-11-30 15:11:51 25 4
gpt4 key购买 nike

在我的内部 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 上下文,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate)在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext 上下文,类型 principalType,字符串 identityValue)在 System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文,String identityValue)在 *****.IsWindowsIDValid(String strWindowsID) 在 *****.ascx.cs:line 193

如果我尝试检查 PrincipalContext 的 ConnectedServer 属性,也会发生同样的错误。但是,我可以尝试根据上下文验证凭据(使用 context.ValidateCredentials()),它会顺利通过。

关于可能发生的事情有什么想法吗?我可以在我机器上的独立控制台脚本中很好地运行这段代码——当我尝试调试 webapp 时,这发生在我的本地开发环境中,在 VisualStudio 中。这是权限问题还是其他问题?在这一点上我很迷茫。

感谢您的帮助!

-帕特里克

最佳答案

一个老问题,但我有同样的错误。对我来说,问题是 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);

对我来说,这不是解决方案,因为我没有这两个参数。但这就是为什么你得到你得到的错误。

根据 Microsoft 的帮助,按您的方式进行操作应该在调用进程的凭据下运行...但无论我在谁(并且我已经验证了模拟)下运行对 UserPrincipal< 的调用 对象而不在其 PrincipalContext 上指定用户名和密码将无法工作。

希望迟来的帮助,詹姆斯

关于c# - FindByIdentity 在 ASP.NET webapp 中因 PricipalOperationException 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com