纯属个人记录,不供大家学习。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.DirectoryServices;
namespace DPForAD2BPMTel
{
public class ADHelper
{
public static String LDAPPath = ConfigurationManager.AppSettings["LDAPPath"];
public static String Domain = ConfigurationManager.AppSettings["Domain"];
public static String DomainUser = ConfigurationManager.AppSettings["DomainUser"];
public static String DomainPass = ConfigurationManager.AppSettings["DomainPass"];
/// <summary>
/// 验证AD用户是否登陆成功
/// </summary>
/// <param name="domain">域名称</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <returns>返回登陆状态</returns>
public static bool TryAuthenticate(string Account, string Password)
{
bool isLogin = false;
try
{
DirectoryEntry entry = new DirectoryEntry(string.Format(LDAPPath, Domain), Account, Password);
entry.RefreshCache();
isLogin = true;
}
catch
{
isLogin = false;
}
return isLogin;
}
/// <summary>
/// 设置指定的属性值
/// </summary>
/// <param name="de"></param>
/// <param name="propertyName">属性名称?</param>
/// <param name="propertyValue">属性值</param>
public static void SetProperty(DirectoryEntry de, string propertyName, string propertyValue)
{
if (de.Properties.Contains(propertyName))
{
if (String.IsNullOrEmpty(propertyValue))
{
de.Properties[propertyName].RemoveAt(0);
}
else
{
de.Properties[propertyName][0] = propertyValue;
}
}
else
{
if (!String.IsNullOrEmpty(propertyValue))
{
de.Properties[propertyName].Add(propertyValue);
}
}
}
/// <summary>
/// 修改查询到的用户
/// </summary>
/// <param name="CommonName">通用名(displayName,系统中显示的中文字)</param>
/// <param name="Account">帐户名(如Peter)</param>
/// <param name="organizeName">组织单元名(资讯中心)</param>
/// <param name="password">密码</param>
public static bool ChangePassword(string Account, string NewPassword)
{
bool isLogin = false;
try
{
DirectoryEntry entry1 = new DirectoryEntry(LDAPPath, DomainUser, DomainPass, AuthenticationTypes.Secure);
Object obj = entry1.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry1);
search.Filter = "(SAMAccountName=" + Account + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
DirectoryEntry user = result.GetDirectoryEntry();
SetProperty(user, "sAMAccountName", Account);
user.Invoke("SetPassword", new object[] { NewPassword });
user.CommitChanges();
isLogin = true;
}
catch
{
isLogin = false;
}
return isLogin;
}
/// <summary>
/// 根据员工ID获取对应AD域账号
/// </summary>
/// <param name="EmployeeID"></param>
/// <returns></returns>
public static string GetAccountByEmployeeID(string EmployeeID)
{
string Account = string.Empty;
try
{
DirectoryEntry entry = new DirectoryEntry(LDAPPath, DomainUser, DomainPass, AuthenticationTypes.Secure);
Object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "EmployeeID=" + EmployeeID;// "(SAMAccountName=qiu.fangbing)";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
DirectoryEntry user = result.GetDirectoryEntry();
Account = Convert.ToString(user.Invoke("Get", new object[] { "SAMAccountName" }));
//string AD = user.Properties["SAMAccountName"].Value.ToString();
//string FullName = Convert.ToString(user.Invoke("Get", new object[] { "displayName" }));
//string Email = Convert.ToString(user.Invoke("Get", new object[] { "mail" }));
//string Path = Convert.ToString(user.Invoke("Get", new object[] { "distinguishedName" }));
}
catch
{
Account = string.Empty;
}
return Account;
}
/// <summary>
/// 根据员工工号获取对应AD信息
/// </summary>
/// <param name="EmployeeID"></param>
/// <returns></returns>
public static ADInfo GetInfoByEmployeeID(string EmployeeID)
{
ADInfo info = new ADInfo();
try
{
DirectoryEntry entry = new DirectoryEntry(LDAPPath, DomainUser, DomainPass, AuthenticationTypes.Secure);
Object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "EmployeeID=" + EmployeeID;// "(SAMAccountName=qiu.fangbing)";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
DirectoryEntry user = result.GetDirectoryEntry();
info.Account = Convert.ToString(user.Invoke("Get", new object[] { "SAMAccountName" }));
info.EmployeeID = Convert.ToString(user.Invoke("Get", new object[] { "EmployeeID" }));
info.Tel = Convert.ToString(user.Invoke("Get", new object[] { "telephoneNumber" }));
//info.DisplayName = Convert.ToString(user.Invoke("Get", new object[] { "displayName" }));
//info.Email = Convert.ToString(user.Invoke("Get", new object[] { "mail" }));
//info.Company = Convert.ToString(user.Invoke("Get", new object[] { "physicalDeliveryOfficeName" }));
//info.Center = Convert.ToString(user.Invoke("Get", new object[] { "company" }));
//info.Department = Convert.ToString(user.Invoke("Get", new object[] { "Department" }));
//info.Postion = Convert.ToString(user.Invoke("Get", new object[] { "title" }));
//info.Mobile = Convert.ToString(user.Invoke("Get", new object[] { "mobile" }));
}
catch
{
info = null;
}
return info;
}
}
}