文章目录
很多时候我们程序的会员管理功能都是基于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 = "密码修改失败,请检测旧密码是否正确"; }