我在通过 Active Directory 获取组时遇到问题System.DirectoryServices
最初我在域中注册的计算机上启动我的应用程序,但由于它是一个实时域,我不想对 AD 进行任何写入,所以我设置了一台以 Windows XP 作为主机操作系统的机器,并在虚拟机上安装了 windows server 2003。
我在机器中添加了另一个以太网端口并设置了一个交换机,1 个以太网端口专用于 VM,另一个端口用于主机。
在配置 IP 地址以使它们进行通信后,我将我的应用程序转移到主机上并启动它,但我得到了一个DirectoryServicesCOMException
.
提示用户名和密码无效 :( 只是为了检查它不是活动目录,我创建了第三个虚拟机并安装了 Windows XP,我使用在 APP 中测试的凭据将其添加到域中,这是一种享受.
所以我认为这一定是因为运行应用程序的机器不是域的一部分。
这是导致问题的代码块:
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);
我检查组之后的行导致错误,所以主要问题是下面的代码行在未加入网络的机器上无法正常工作:
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);