`

用C#对Active Directory进行增删修查以及用户校验

    博客分类:
  • C#
阅读更多
本文引自:http://hi.baidu.com/zhizhesky/blog/item/f4b70ae90122eb33b80e2db3.html

用C#对Active Directory进行增删修查以及用户校验2010-05-20 14:27http://blog.sina.com.cn/s/blog_53864cba0100i4rz.html

第一个类,获取AD实例类;

AdHerlp.cs

public static class AdHerlp
{
#region 创建AD连接
/// <summary>
/// 创建AD连接
/// </summary>
/// <returns></returns>
public static DirectoryEntry GetDirectoryEntry()
{
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://qjyczsgl/CN=Users,DC=qjyczsgl,DC=com";
de.Username = @"qjyczsgl\zsgl";
de.Password = "qjyczsgl";
return de;
}
#endregion

#region 获取目录实体集合
/// <summary>
///
/// </summary>
/// <param name="DomainReference"></param>
/// <returns></returns>
public static DirectoryEntry GetDirectoryEntry(string DomainReference)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://qjyczsgl" + DomainReference, "zsgl", "qjyczsgl", AuthenticationTypes.Secure);
return entry;
}
#endregion
}

AD操作类

myDirectory.cs

class myDirectory
{

/// <summary>
/// 判断用户是否存在
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public bool UserExists(string UserName)
{
DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + UserName + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count == 0)
{
return false;
}
else
{
return true;
}
}
/// <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 (PropertyValue != null)
{
if (de.Properties.Contains(PropertyName))
{
de.Properties[PropertyName][0] = PropertyValue;
}
else
{
de.Properties[PropertyName].Add(PropertyValue);
}
}
}

/// <summary>
/// 生成随机密码
/// </summary>
/// <returns></returns>
public string SetSecurePassword()
{
//RandomPassword rp = new RandomPassword();
return RandomPassword.Generate(8,;
}

/// <summary>
/// 设置用户新密码
/// </summary>
/// <param name="path"></param>
public void SetPassword(string path)
{
DirectoryEntry usr = new DirectoryEntry();
usr.Path = path;
usr.AuthenticationType = AuthenticationTypes.Secure;
object[] password = new object[] { SetSecurePassword() };
object ret = usr.Invoke("SetPassword", password);
usr.CommitChanges();
usr.Close();
}

/// <summary>
/// 启用用户帐号
/// </summary>
/// <param name="de"></param>
private static void EnableAccount(DirectoryEntry de)
{
//UF_DONT_EXPIRE_PASSWD 0x10000
int exp = (int)de.Properties["userAccountControl"].Value;
de.Properties["userAccountControl"].Value = exp | 0x0001;
de.CommitChanges();
//UF_ACCOUNTDISABLE 0x0002
int val = (int)de.Properties["userAccountControl"].Value;
de.Properties["userAccountControl"].Value = val & ~0x0002;
de.CommitChanges();
}

/// <summary>
/// 添加用户到组
/// </summary>
/// <param name="de"></param>
/// <param name="deUser"></param>
/// <param name="GroupName"></param>
public static void AddUserToGroup(DirectoryEntry de, DirectoryEntry deUser, string GroupName)
{
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=group) (cn=" + GroupName + "))";
SearchResultCollection results = deSearch.FindAll();

bool isGroupMember = false;

if (results.Count > 0)
{
DirectoryEntry group = AdHerlp.GetDirectoryEntry(results[0].Path);

object members = group.Invoke("Members", null);
foreach (object member in (IEnumerable)members)
{
DirectoryEntry x = new DirectoryEntry(member);
if (x.Name != deUser.Name)
{
isGroupMember = false;
}
else
{
isGroupMember = true;
break;
}
}

if (!isGroupMember)
{
group.Invoke("Add", new object[] { deUser.Path.ToString() });
}
group.Close();
}
return;
}

/// <summary>
/// 创建一个新用户
/// </summary>
/// <param name="employeeID"></param>
/// <param name="name"></param>
/// <param name="login"></param>
/// <param name="email"></param>
/// <param name="group"></param>
public void CreateNewUser(string employeeID, string name, string login, string email, string group)
{
//Catalog catalog = new Catalog();
DirectoryEntry de =AdHerlp.GetDirectoryEntry();

/// 1. Create user account
DirectoryEntries users = de.Children;
DirectoryEntry newuser = users.Add("CN=" + login, "user");

/// 2. Set properties
SetProperty(newuser, "employeeID", employeeID);
SetProperty(newuser, "givenname", name);
SetProperty(newuser, "SAMAccountName", login);
SetProperty(newuser, "userPrincipalName", login);
SetProperty(newuser, "mail", email);
newuser.CommitChanges();

/// 3. Set password
SetPassword(newuser.Path);
newuser.CommitChanges();

/// 4. Enable account          
EnableAccount(newuser);

/// 5. Add user account to groups
AddUserToGroup(de, newuser, group);

/// 6. Create a mailbox in Microsoft Exchange  
//GenerateMailBox(login);

newuser.Close();
de.Close();
}
/// <summary>
/// 禁用一个帐号
/// </summary>
/// <param name="EmployeeID"></param>
public void DisableAccount(string EmployeeID)
{
DirectoryEntry de =AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectCategory=Person)(objectClass=user)(employeeID=" + EmployeeID + "))";
ds.SearchScope = SearchScope.Subtree;
SearchResult results = ds.FindOne();

if (results != null)
{
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(results.Path);
int val = (int)dey.Properties["userAccountControl"].Value;
dey.Properties["userAccountControl"].Value = val | 0x0002;
dey.Properties["msExchHideFromAddressLists"].Value = "TRUE";
dey.CommitChanges();
dey.Close();
}

de.Close();
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="employeeID"></param>
/// <param name="department"></param>
/// <param name="title"></param>
/// <param name="company"></param>
public void ModifyUser(string employeeID, string department, string title, string company)
{
DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectCategory=Person)(objectClass=user)(employeeID=" + employeeID + "))";
ds.SearchScope = SearchScope.Subtree;
SearchResult results = ds.FindOne();

if (results != null)
{
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(results.Path);
SetProperty(dey, "department", department);
SetProperty(dey, "title", title);
SetProperty(dey, "company", company);
dey.CommitChanges();
dey.Close();
}

de.Close();
}

/// <summary>
/// 检验Email格式是否正确
/// </summary>
/// <param name="mail"></param>
/// <returns></returns>
public bool IsEmail(string mail)
{
Regex mailPattern = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
return mailPattern.IsMatch(mail);
}
/// <summary>
/// 搜索被修改过的用户
/// </summary>
/// <param name="fromdate"></param>
/// <returns></returns>
public DataTable GetModifiedUsers(DateTime fromdate)
{
DataTable dt = new DataTable();
dt.Columns.Add("EmployeeID");
dt.Columns.Add("Name");
dt.Columns.Add("Email");

DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);

StringBuilder filter = new StringBuilder();
filter.Append("(&(objectCategory=Person)(objectClass=user)(whenChanged>=");
filter.Append(ToADDateString(fromdate));
filter.Append("))");

ds.Filter = filter.ToString();
ds.SearchScope = SearchScope.Subtree;
SearchResultCollection results = ds.FindAll();

foreach (SearchResult result in results)
{
DataRow dr = dt.NewRow();
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(result.Path);
dr["EmployeeID"] = dey.Properties["employeeID"].Value;
dr["Name"] = dey.Properties["givenname"].Value;
dr["Email"] = dey.Properties["mail"].Value;
dt.Rows.Add(dr);
dey.Close();
}

de.Close();
return dt;
}

/// <summary>
/// 格式化AD的时间
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string ToADDateString(DateTime date)
{
string year = date.Year.ToString();
int month = date.Month;
int day = date.Day;

StringBuilder sb = new StringBuilder();
sb.Append(year);
if (month < 10)
{
sb.Append("0");
}
sb.Append(month.ToString());
if (day < 10)
{
sb.Append("0");
}
sb.Append(day.ToString());
sb.Append("000000.0Z");
return sb.ToString();
}
}

校验:

using System.DirectoryServices;    //srvr = ldap server, e.g. LDAP://domain.com    //usr = user name    //pwd = user password    public bool IsAuthenticated(string srvr, string usr, string pwd)    {        bool authenticated = false;        try        {            DirectoryEntry entry = new DirectoryEntry(srvr, usr, pwd);            object nativeObject = entry.NativeObject;            authenticated = true;        }        catch (DirectoryServicesCOMException cex)        {            //not authenticated; reason why is in cex        }        catch (Exception ex)        {            //not authenticated due to some other exception [this is optional]        }        return authenticated;    }更多请看 http://www.codeproject.com/KB/system/everythingInAD.aspx

分享到:
评论

相关推荐

    c#增删改查

    在这个“C#增删改查”的示例程序中,我们主要关注的是如何使用C#来操作数据库,实现基本的数据管理功能。下面将详细阐述相关知识点。 1. 数据库连接:在C#中,我们通常使用ADO.NET库来建立与数据库的连接。ADO.NET...

    C#表单的增删改查

    总的来说,C#表单的增删改查涉及了数据库连接、数据绑定、用户交互、SQL操作等多个方面,是Windows Forms应用程序开发中的基础技能。理解并熟练掌握这些知识点,将有助于构建功能完善的数据库应用系统。

    C# .net mvc 三层架构 增删改查

    在.NET开发领域,C#与ASP.NET MVC框架的结合常用于构建高效、可维护的Web应用程序。本项目涉及的核心知识点...以上就是关于“C# .NET MVC 三层架构 增删改查”这个主题的详细解释,希望对你理解和实践Web开发有所帮助。

    C#winform实现增删改查

    "C# WinForm实现增删改查"是一个基础但至关重要的概念,它涵盖了构建任何数据驱动应用程序的核心功能。以下是关于这个主题的详细说明。 首先,让我们了解C# WinForms的基本概念。C#(读作"C Sharp")是由微软开发的...

    C#对数据库的操作(包括增删改查)

    本示例主要讲解了如何使用C#进行数据库的增删改查(CRUD)操作,这对于开发Windows桌面应用程序,如Winform程序,尤其关键。 首先,C#操作数据库通常会利用ADO.NET框架,它提供了丰富的类库来连接、查询和管理...

    c#winform简单的登陆及增删改查

    在C# WinForm环境下开发一个简单的登录及增删改查应用是初学者和专业人士都常见的实践项目。这个项目主要涉及到几个关键的技术点,包括数据库交互、用户界面设计、事件处理和基本的数据操作逻辑。 首先,**C#** 是...

    C# 高级技巧 操作 XML 增 删 改 查

    C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查

    在C#中使用控件DataGridView实现数据库增删改查

    在 C# 中使用控件 DataGridView 实现数据库增删改查是指在 Windows 窗体应用程序中使用 DataGridView 控件来实现对数据库的增删改查操作。下面将详细介绍实现该功能的知识点。 一、DataGridView 控件概述 ...

    C#连接Oracle数据增删改查

    本文将深入探讨如何使用C#连接Oracle数据库并进行基本的增删改查操作。通过提供的OracleTest增删改查项目源码,我们可以直观地了解这一过程。 首先,连接Oracle数据库需要Oracle的客户端驱动,例如ODP.NET(Oracle ...

    C#winform 增删改查

    本文将深入探讨如何使用C#和Visual Studio 2013(VS2013)结合SQL Server 2012来实现“增删改查”功能,这是任何数据驱动应用程序的基础。 首先,让我们理解“增删改查”是什么。这四个英文首字母缩写词分别代表...

    C# SQLite3增删改查Demo

    本篇将重点介绍如何使用C#语言进行SQLite3的增删改查操作,这对于初学者来说是一次极好的实践机会。 首先,我们要理解C#与SQLite3的集成。C#通过SQLite的.NET数据提供程序(System.Data.SQLite)来与SQLite交互。...

    C#三层架构的增删改查

    以下是对每层的详细解释以及它们在"C#三层架构的增删改查"中的作用。 1. 表现层(Presentation Layer): 这是用户与系统交互的界面,负责处理用户输入、显示数据和提供反馈。在C#中,这一层通常由Windows Forms、...

    详解C#使用AD(Active Directory)验证内网用户名密码

    以下是一个使用 C# 语言对 Active Directory 进行验证的示例代码: ```csharp public bool ADLogin(string userName, string password) { // 连接 Active Directory string domain = System.Configuration....

    C#连接sql数据库执行简单的增删改查操作

    增删改查操作是指对数据库中的数据进行增添、删除、修改等操作。 C#连接sql数据库执行简单的增删改查操作是非常基本却非常重要的数据库操作技术。需要掌握连接数据库、执行增删改查操作、参数化查询、执行结果、...

    【c#/MVC】运用MVC模式,做一个增删查改简单数据库,以及涉及到的知识

    在本文中,我们将深入探讨如何使用C#和MVC(Model-View-Controller)模式创建一个简单的数据库应用程序,实现增删查改(CRUD)操作。MVC是一种流行的设计模式,广泛应用于Web开发中,因为它提供了清晰的架构,将业务...

    C#连接oracle数据库执行简单的增删改查操作.docx

    C#连接Oracle数据库执行简单的增删改查操作是指使用C#语言连接Oracle数据库,并执行基本的数据操作,如增删改查。下面是对该操作的详细解释: 一、连接Oracle数据库 要连接Oracle数据库,需要引用System.Data....

    C#Winform 增删改查 SqlServer(附数据库)

    在本文中,我们将深入探讨如何使用C# Winform与Sql Server数据库进行交互,实现增删改查功能。这个系统特别适合初学者学习,通过Visual Studio 2017开发环境,我们可以构建一个用户友好的图形界面,以方便地管理学生...

    C#.Net实现的WebpApi,增删改查

    - 使用ADO.NET、Entity Framework或其他ORM(对象关系映射)工具,如Dapper,与数据库进行交互,执行增删改查操作。 7. **增(Create)** - POST请求用于创建新资源。控制器接收POST请求,验证输入,然后将数据...

    C#实现增删改查 学生管理系统

    在本项目中,"C#实现增删改查 学生管理系统"是一个使用C#编程语言构建的应用程序,主要用于管理学生信息。这个系统基于Access数据库,提供了对学生数据的基本操作,包括添加新学生、删除现有学生、修改学生信息以及...

Global site tag (gtag.js) - Google Analytics