我需要让用户将那里的帐户绑定到Active Directory。这意味着管理员需要一个GUI,在那里他/她可以写一个Active Directory帐户,比如MyDomain\MyName,然后如果用户在保存前存在,那么就进行验证。
我使用这段代码来验证名称:
public static bool CheckActiveDirectoryAccount(string account)
{
string ADServer = null;
string ADDomain = null;
string ADUserName = null;
string ADUserPassword = null;
SetADSettings(out ADServer, out ADDomain, out ADUserName, out ADUserPassword);
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, ADServer, ADUserName, ADUserPassword))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, account))
{
if(user != null)
return true;
else
return false;
}
}
}这段代码的问题是,似乎没有办法检查用户是否有特定的域?相反,我必须输入服务器,如果我尝试输入域,就会出现异常(没有找到服务器)。
如何让管理员输入域和AD帐户的用户名,然后检查它与AD?
发布于 2014-05-14 10:30:24
最后我得到了这个:
public static string CheckActiveDirectoryAccount(string account)
{
UserPrincipal user;
PrincipalContext context;
List<string> userPrincipalNameList;
string ADServer = null;
string ADUserName = null;
string ADUserPassword = null;
string userAccount;
account = account.ToLower();
GetADSettings(out ADServer, out ADUserName, out ADUserPassword);
if (ADUserName.Length > 0)
context = new PrincipalContext(ContextType.Domain, ADServer, null, ADUserName, ADUserPassword);
else
context = new PrincipalContext(ContextType.Domain, ADServer);
using (context)
{
if((user = UserPrincipal.FindByIdentity(context, account)) == null)
{
if(account.Contains("\\"))
{
userPrincipalNameList = user.UserPrincipalName.Split('\\').ToList();
if (userPrincipalNameList.Count > 0)
user = UserPrincipal.FindByIdentity(context, userPrincipalNameList[0]);
}
}
if (user != null)
{
using (user)
{
userPrincipalNameList = user.UserPrincipalName.Split('@').ToList();
userAccount = userPrincipalNameList.First();
if (userPrincipalNameList.Count > 1)
userAccount = userPrincipalNameList.Last() + "\\" + userAccount;
if (user != null)
return userAccount.ToLower();
}
}
}
return string.Empty;
}发布于 2014-04-04 17:17:58
我能够在没有问题的情况下将域传递到主体上下文中,我不会传递服务器。我希望这对你有用。
public static bool CheckActiveDirectoryAccount(string account, string domain)
{
using (var pc = new PrincipalContext(ContextType.Domain, domain))
{
// Find a user
UserPrincipal user = UserPrincipal.FindByIdentity(pc, account);
if (user == null)
return false;
return true;
}
}我注意到在传递NetBIOS域名时性能不佳,尽管它确实有效。因此,只要有可能,我就传入DNS域名。
https://stackoverflow.com/questions/22866122
复制相似问题