我只想在下面的现有代码中添加新方法。 方法是简单地检查给定的 User_ID ,如果它存在于AD上。
这是我第一次与AD打交道。
public class AD
{
// Fields
private static string ADPassword = ConfigurationManager.AppSettings["ADPassword"].ToString();
private static string ADPath = ConfigurationManager.AppSettings["ADConnection"].ToString();
private static string ADServerName = ConfigurationManager.AppSettings["ADServerName"].ToString();
private static string ADUserName = ConfigurationManager.AppSettings["ADUserName"].ToString();
// Methods
public static string GetLogin(string sUserName, string sPassword)
{
try
{
DirectoryEntry entry = new DirectoryEntry(ADPath, ADServerName + sUserName, sPassword);
object nativeObject = entry.NativeObject;
return string.Empty;
}
catch
{
return "Invalid Username or Password";
}
}
public static string Update(string sUserName, string sOldPassword, string sNewPassword)
{
string message;
try
{
DirectoryEntry searchRoot = new DirectoryEntry();
searchRoot.Path = ADPath;
searchRoot.Username = ADServerName + ADUserName;
searchRoot.Password = ADPassword;
DirectorySearcher searcher = new DirectorySearcher(searchRoot);
searcher.Filter = "(SAMAccountName=" + sUserName + ")";
DirectoryEntry directoryEntry = searcher.FindOne().GetDirectoryEntry();
directoryEntry.Invoke("ChangePassword", new object[] { sOldPassword, sNewPassword });
directoryEntry.CommitChanges();
directoryEntry.Close();
message = string.Empty;
}
catch (Exception exception)
{
try
{
message = exception.InnerException.Message;
}
catch
{
message = exception.Message;
}
}
return message;
}
}
答案 0 :(得分:1)
您使用的是哪个版本的.NET Framework?
在3.5之前的.NET中,您可能在整个服务器上执行DirectorySearch(或者更具约束性的子树):
public bool UserExists(string userName)
{
DirectoryEntry searchRoot = new DirectoryEntry("LDAP://dc=yourcompany,dc=com", userName, password);
DirectorySearcher searchForUser = new DirectorySearcher(searchRoot);
searchForUser.SearchScope = SearchScope.SubTree;
searchForUser.Filter = string.Format("(&(objectCategory=Person)(anr={0}))", userName);
if(searchForUser.FindOne() != null)
{
return true;
}
else
{
return false;
}
}
这只是我的头脑,现在无法测试。这将在您的整个域中搜索 - 检查searchRoot的LDAP路径 - 它必须类似于
LDAP://dc=yourcompany,dc=com
或者如果您想在“用户”容器内搜索:
LDAP://cn=Users,dc=yourcompany,dc=com
使用.NET 3.5,事情变得容易多了 - 请参阅此MSDN Article,了解有关如何使用新的System.DirectoryServices.AccountManagement
命名空间在.NET 3.5中搜索和查找用户和组的大量有用信息。您现在基本上可以进行FindByIdentity
调用:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
UserPrincipal foundUser = UserPrincipal.FindByIdentity(ctx, "your user name");
这就是全部。
马克
答案 1 :(得分:0)
如果这是您的第一次AD体验,可能值得一看这个代码项目文章:Howto: (Almost) Everything In Active Directory via C#。它包含许多可能对您有所帮助的示例。
User_ID究竟是什么意思?用户名? LDAP专有名称?