很多时候我们程序的会员管理功能都是基于Form验证的,但是有些功能强大的程序往往集成在域环境中。Dynamics CRM就是其中之一,那我们能不能像使用Form验证那样简单的通过某个Web页面来修改我们的域用户密码呢?微软早就给我们提供了解决方案了,通过调用.NET的域组件就能对域进行处理了。
为什么要在Web上修改域用户密码?
虽然用户可以在自己的Windows系统上修改密码,但是提供Web的方式将会更灵活,它能让你随时随地的修改你的密码。
实现思路
我们的Web页面需要收集用户的域账号,旧密码以及需要修改的新密码。在确保这些数据有效后,调用.Net组件对目标域发起修改密码的请求。这里唯一的难点是:怎么在域中找到用户的位置。我建议对整个域进行遍历来定位用户位置。虽然有失效率,但不容易出错。
操作界面
图1
图2
图3
图4
核心代码
using System.DirectoryServices;
DirectoryEntry de = new DirectoryEntry("LDAP://GhostHouse2011.GH");//域的根路径
de.UsePropertyCache = true;
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = de;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = string.Format("(&(objectClass=user)(samAccountName={0}))", txtUsername.Text.Trim());
SearchResult result = searcher.FindOne();
if (result == null)
{
lblResultMessage.Text = "该用户不存在,无法进行密码修改.";
}
try
{
result.GetDirectoryEntry().Invoke("ChangePassword", new object[] { txtOldPwd.Text.Trim(), txtNewPwd.Text.Trim() });
lblResultMessage.Text = "密码修改成功";
}
catch (Exception ex)
{
lblResultMessage.Text = "密码修改失败,请检测旧密码是否正确";
}