ADHelp类.docx
- 文档编号:26502129
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:53
- 大小:24.47KB
ADHelp类.docx
《ADHelp类.docx》由会员分享,可在线阅读,更多相关《ADHelp类.docx(53页珍藏版)》请在冰豆网上搜索。
ADHelp类
System;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.DirectoryServices;
usingSystem.Security.Principal;
usingSystem.Runtime.InteropServices;
namespaceUserDLL
{
sealedclassADHelper
{
#region私有变量
///
///homeMTA
///
privatestaticstringhomeMTA="";//请填写自己的环境变量
///
///homeMDB
///
privatestaticstringhomeMDB="";//请填写自己的环境变量
///
///msExchHomeServerName
///
privatestaticstringmsExchHomeServerName="";//请填写自己的环境变
量
///
///域名
///
//privatestaticstringDomainName="td-";//实际
privatestaticstringDomainName="";//测试用
///
///LDAP地址
///
privatestaticstringLDAPDomain="DC=net,DC=TD-TECH";
///
///LDAP绑定路径
///
privatestaticstringADPath="LDAP:
//C";//测试用
privatestaticstringsPrincpleNameTail="@";
///
///登录帐号
///
privatestaticstringADUser=@"contoso\oa";
///
///登录密码
///
//privatestaticstringADPassword="3edc5tgB";//实际
privatestaticstringADPassword="1qaz2wsX";//测试用
#endregion
#region枚举常量
///
///用户登录验证结果
///
publicenumLoginResult
{
///
///正常登录
///
LOGIN_USER_OK=0,
///
///用户不存在
///
LOGIN_USER_DOESNT_EXIST,
///
///用户帐号被禁用
///
LOGIN_USER_ACCOUNT_INACTIVE,
///
///用户密码不正确
///
LOGIN_USER_PASSWORD_INCORRECT
}
///
///用户属性定义标志
///
publicenumADS_USER_FLAG_ENUM
{
///
///登录脚本标志。
如果通过ADSILDAP进行读或写操作时,
///该标志失效。
如果通过ADSIWINNT,该标志为只读。
///
ADS_UF_SCRIPT=0X0001,
///
///用户帐号禁用标志
///
ADS_UF_ACCOUNTDISABLE=0X0002,
///
///主文件夹标志
///
ADS_UF_HOMEDIR_REQUIRED=0X0008,
///
///过期标志
///
ADS_UF_LOCKOUT=0X0010,
///
///用户密码不是必须的
///
ADS_UF_PASSWD_NOTREQD=0X0020,
///
///密码不能更改标志
///
ADS_UF_PASSWD_CANT_CHANGE=0X0040,
///
///使用可逆的加密保存密码
///
ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED=0X0080,
///
///本地帐号标志
///
ADS_UF_TEMP_DUPLICATE_ACCOUNT=0X0100,
///
///普通用户的默认帐号类型
///
ADS_UF_NORMAL_ACCOUNT=0X0200,
///
///跨域的信任帐号标志
///
ADS_UF_INTERDOMAIN_TRUST_ACCOUNT=0X0800,
///
///工作站信任帐号标志
///
ADS_UF_WORKSTATION_TRUST_ACCOUNT=0x1000,
///
///服务器信任帐号标志
///
ADS_UF_SERVER_TRUST_ACCOUNT=0X2000,
///
///密码永不过期标志
///
ADS_UF_DONT_EXPIRE_PASSWD=0X10000,
///
///MNS帐号标志
///
ADS_UF_MNS_LOGON_ACCOUNT=0X20000,
///
///交互式登录必须使用智能卡
///
ADS_UF_SMARTCARD_REQUIRED=0X40000,
///
///当设置该标志时,服务帐号(用户或计算机帐号)将通过Kerberos
委托信任
///
ADS_UF_TRUSTED_FOR_DELEGATION=0X80000,
///
///当设置该标志时,即使服务帐号是通过Kerberos委托信任的,敏感
帐号不能被委托
///
ADS_UF_NOT_DELEGATED=0X100000,
///
///此帐号需要DES加密类型
///
ADS_UF_USE_DES_KEY_ONLY=0X200000,
///
///不要进行Kerberos预身份验证
///
ADS_UF_DONT_REQUIRE_PREAUTH=0X4000000,
///
///用户密码过期标志
///
ADS_UF_PASSWORD_EXPIRED=0X800000,
///
///用户帐号可委托标志
///
ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION=0X1000000
}
#endregion
#region构造函数
publicADHelper()
{
//
//System.Environment.UserName
}
///
///多联的AD构造函数
///
///
///
///
///
publicADHelper(stringsADPath,stringsDomainName,stringsADUser,
stringsADUserPWD)
{
ADPath=sADPath;
DomainName=sDomainName;
ADUser=sADUser;
ADPassword=sADUserPWD;
}
#endregion
#regionGetDirectoryObject
///
///获得DirectoryEntry对象实例,以管理员登陆AD
///
///
privatestaticDirectoryEntryGetDirectoryObject()
{
DirectoryEntryentry=newDirectoryEntry(ADPath,ADUser,
ADPassword,AuthenticationTypes.Secure);
returnentry;
}
///
///根据指定用户名和密码获得相应DirectoryEntry实体
///
///
///
///
privatestaticDirectoryEntryGetDirectoryObject(stringuserName,
stringpassword)
{
DirectoryEntryentry=newDirectoryEntry(ADPath,
userName,password,AuthenticationTypes.None);
returnentry;
}
///
///i.e./CN=Users,DC=creditsights,DC=cyberelves,DC=Com
///
///
///
privatestaticDirectoryEntryGetDirectoryObject(string
domainReference)
{
DirectoryEntryentry=newDirectoryEntry(ADPath+
domainReference,ADUser,ADPassword,
AuthenticationTypes.Secure);
returnentry;
}
///
///获得以UserName,Password创建的DirectoryEntry
///
///
///
///
///
privatestaticDirectoryEntryGetDirectoryObject(string
domainReference,
stringuserName,stringpassword)
{
DirectoryEntryentry=newDirectoryEntry(ADPath+
domainReference,
userName,password,AuthenticationTypes.Secure);
returnentry;
}
#endregion
#regionGetDirectoryEntry
///
///根据用户公共名称取得用户的对象
///
///
///
null
publicstaticDirectoryEntryGetDirectoryEntry(stringcommonName)
{
DirectoryEntryde=GetDirectoryObject();
DirectorySearcherdeSearch=newDirectorySearcher(de);
deSearch.Filter="(&(&(objectCategory=person)
(objectClass=user))(cn="+commonName+"))";
deSearch.SearchScope=SearchScope.Subtree;
try
{
SearchResultresult=deSearch.FindOne();
de=newDirectoryEntry(result.Path);
//de.Username=ADUser;
returnde;
}
catch
{
returnnull;
}
}
///
///根据用户公共名称和密码取得用户的对象。
///
///
///
///
null
publicstaticDirectoryEntryGetDirectoryEntry(stringcommonName,
stringpassword)
{
DirectoryEntryde=GetDirectoryObject(commonName,password);
DirectorySearcherdeSearch=newDirectorySearcher(de);
deSearch.Filter="(&(&(objectCategory=person)
(objectClass=user))(cn="+commonName+"))";
deSearch.SearchScope=SearchScope.Subtree;
try
{
SearchResultresult=deSearch.FindOne();
de=newDirectoryEntry(result.Path);
returnde;
}
catch
{
returnnull;
}
}
///
///根据用户帐号称取得用户的对象
///
///
///
null
publicstaticDirectoryEntryGetDirectoryEntryByAccount(string
sAMAccountName)
{
DirectoryEntryde=GetDirectoryObject(ADUser,ADPassword);
DirectorySearcherdeSearch=newDirectorySearcher(de);
deSearch.Filter="(&(&(objectCategory=person)
(objectClass=user))(sAMAccountName="+sAMAccountName+"))";
deSearch.SearchScope=SearchScope.Subtree;
try
{
SearchResultresult=deSearch.FindOne();
de=newDirectoryEntry(result.Path,ADUser,ADPassword);
returnde;
}
catch(Exceptionex)
{
returnnull;
}
}
///
///根据用户帐号和密码取得用户的对象
///
///
///
///
null
publicstaticDirectoryEntryGetDirectoryEntryByAccount(string
sAMAccountName,stringpassword)
{
DirectoryEntryde=GetDirectoryEntryByAccount(sAMAccountName);
if(de!
=null)
{
stringcommonName=de.Properties["cn"][0].ToString();
if(GetDirectoryEntry(commonName,password)!
=null)
returnGetDirectoryEntry(commonName,password);
else
returnnull;
}
else
{
returnnull;
}
}
///
///根据组名取得用户组的对象
///
///
///
publicstaticDirectoryEntryGetDirectoryEntryOfGroup(string
groupName)
{
DirectoryEntryde=GetDirectoryObject();
DirectorySearcherdeSearch=newDirectorySearcher(de);
deSearch.Filter="(&(objectClass=group)(cn="+groupName+"))";
deSearch.SearchScope=SearchScope.Subtree;
try
{
SearchResultresult=deSearch.FindOne();
de=newDirectoryEntry(result.Path);
returnde;
}
catch
{
returnnull;
}
}
#endregion
#regionGetProperty
///
///获得指定指定属性名对应的值
///
///
则为部门的对象
///
///
publicstaticstringGetProperty(DirectoryEntryde,string
propertyName)
{
if(de.Properties.Contains(propertyName))
{
returnde.Properties[propertyName][0].ToString();
}
else
{
returnstring.Empty;
}
}
///
///获得指定搜索结果中指定属性名对应的值
///
///
///属性名称
///属性值
publicstaticstringGetProperty(SearchResultsearchResult,string
propertyName)
{
if(searchResult.Properties.Contains(propertyName))
{
returnsearchResult.Properties[propertyName][0].ToString();
}
else
{
returnstring.Empty;
}
}
///
///查询制定用户是否是锁定状态
///
///
///
publicstaticboolIsAccountLockOut(DirectoryEntryde)
{
returnConvert.ToBoolean(de.InvokeGet("IsAccountlocked"));
}
#endregion
#regionSetProperty
///
///设置指定的属性值
///
///
///
///
publicstaticvoidSetProperty(DirectoryEntryde,string
propertyName,stringpropertyValue)
{
if(propertyValue!
=string.Empty||propertyValue!
=""||
propertyValue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ADHelp
![提示](https://static.bdocx.com/images/bang_tan.gif)