gpt4 book ai didi

c# - 使用 C# 从 Active Directory 获取组

转载 作者:太空狗 更新时间:2023-10-29 20:32:09 26 4
gpt4 key购买 nike

我在通过 System.DirectoryServices 从 Active Directory 获取组时遇到问题

最初,我在域中注册的计算机上启动我的应用程序,但由于它是一个事件域,我不想对 AD 进行任何写入,所以我设置了一台装有 Windows XP 的计算机作为主机操作系统,并在 VM 上安装了 Windows Server 2003。

我在机器上添加了另一个以太网端口并设置了一个交换机,1个以太网端口专用于VM,另一个端口用于主机。

配置 IP 地址使它们能够通信后,我将我的应用程序转移到主机上并启动它,但我收到了 DirectoryServicesCOMException

随着用户名和密码无效的消息 :( 只是为了检查它不是事件目录,我创建了第三个虚拟机并安装了 Windows XP,我使用在应用程序中测试的凭据将其添加到域中,工作愉快。

所以我认为这一定是因为运行应用程序的机器不属于域。

这是导致问题的代码块:

public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
//Validate the Domain!
try
{
PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
_IsValidDomain = true;

//Test the user login
_IsValidLogin = Context.ValidateCredentials(Username, Password);

//Check the Group Admin is within this user
//******HERE
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);

foreach(Principal Result in Results)
{
if (Result.SamAccountName == "Domain Admins")
{
_IsAdminGroup = true;
break;
}
}
Results.Dispose();
Context.Dispose();
}
catch (PrincipalServerDownException)
{
_IsValidDomain = false;
}
}

登录对话框中的信息是这样输入的:

Domain: test.internal
Username: testaccount
Password: Password01

希望有人能阐明这个错误。


更新:

检查服务器上的安全日志后,我可以看到我的登录尝试是成功的,但这归结为:

_IsValidLogin = Context.ValidateCredentials(Username, Password);

在我检查组的位置之后的那一行导致了错误,所以主要问题是下面的代码行在未加入网络的机器上无法正常工作:: p>

var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);

最佳答案

根据您的代码片段,您在调用 ValidateCredentials 之前尝试创建 PrincipalContext 时失败了。那时,运行代码的线程仍然在本地身份(如果您在 Web 进程中)或您在计算机上登录的身份(对于 Windows 进程)下工作。这些中的任何一个都不存在于 test.internal 域中。

您可能想尝试在构造函数中包含用户名和密码的 PrincipalContext 重载。参见 http://msdn.microsoft.com/en-us/library/bb341016.aspx

关于c# - 使用 C# 从 Active Directory 获取组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315568/

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