使用 C# 的活动目录

PHPz
发布: 2024-09-03 15:33:36
原创
716 人浏览过

使用 C# 的 Active Directory 首先是组织计算机、公司用户等。最重要的是用户管理系统,通常用于企业网络和商业目的。公司管理员将用来组织公司的整个历史记录,包括计算机所属的网络、配置文件和访问权限等。 Active Directory 是一种类似于 Oracle 和 SQL 的数据库,它有自己的查询类型语言和基于 LDAP 的规则集。

语法:

要访问 DirectoryEntry 对象,我们需要 Active Directory 用户名、密码和服务器地址。服务器地址包含IP地址或LDAP的路径,语法如下,

LDAP://domain_name.com/DC=domain_name,DC=com
登录后复制

Active Directory 在 C# 中如何工作?

Active Directory 对 IT 管理员确实很有帮助,它有助于组织公司用户、桌面等,它具有完整的层次结构,属于哪个网络、个人资料图片显示的内容以及谁访问存储等等。大多数企业将其应用程序从桌面应用程序升级为支持基于表单的 LDAP 身份验证的 Web 应用程序。有时,.NET 应用程序会与 Microsoft Active Directory (AD) 交互,以检索用户列表、搜索组、对用户进行身份验证,以及验证哪些用户属于哪个 Active Directory 组。通过使用一些方法,我们可以从我们域内的 AD 数据库中检索信息。

有多种方法,其中一种是使用 LDAP(轻量级目录访问协议),它包含属于命名空间 System.DirectoryServices 的类 DirectoryEntry 和 DirectorySearch。另一种方法是使用 Active Directory (AD) 中命名空间 System.DirectoryServices.AccountManagement 下的整套类包装器。通过使用 LDAP 查询,我们可以从 AD 数据库中获取信息。此类允许访问整个 AD,但包装类允许检索 AD 中的用户、计算机对象、组。 DirectoryEntry 和 DirectorySearch 对象类比 System.DirectoryServices.AccountManagement 对象更快。

C# 的 Active Directory 的基本功能包括 System.DirectoryService 库,它有助于使用 AD 库例程进行查询。 Active Directory 通过 DirectoryEntry 的对象进行通信。这些对象是与 LDAP 数据库最重要的连接,我们可以查询其他对象和文件夹。为了访问 DirectoryEntry 对象,我们需要 Active Directory 用户名、密码和服务器地址。服务器地址包含IP地址或LDAP的路径,如下所示,

LDAP://domain_name.com/DC=domain_name,DC=com

使用 C# 的 Active Directory 示例

为了与 DirectoryEntry 对象连接 Active Directory,我们需要创建安全身份验证类型的用户,该用户指示与 Active Directory 的安全身份验证连接。当与管理员帐户连接时,我们可以执行管理员 Active Directory 功能,例如创建新用户、更新用户、删除用户等。

获取Directory对象的DirectoryEntry

private DirectoryEntry Reterieve_DirectoryObject( )
{
DirectoryEntry Obj_de;
Obj_de=new DirectoryEntry("LDAP://IP_Address", "admin","password", AuthenticationTypes Secure);
return _de;
}
登录后复制

在 C# 中从 Active Directory 获取用户

连接到 Active Directory 后,我们需要查询一个对象,例如获取用户,如下所示,

private DirectoryEntry Reterieve_User(string User_Name)
{
DirectoryEntry obj_de = Reterieve_DirectoryObject( );
DirectorySearcher obj_deSearch = new DirectorySearcher();
obj_deSearch.SearchRoot = obj_de;
obj_deSearch.Filter = "(&(objectClass=user)(JOHNAccountName=" + User_Name + "))";
obj_deSearch.SearchScope = SearchScope.Subtree;
SearchResult getPath = obj_deSearch.FindOne();
if (!(getPath == null))
{
obj_de = new DirectoryEntry(getPath.Path, "administrator", "password", AuthenticationTypes.Secure);
return obj_de;
}
else
{
return null;
}
}
登录后复制

上面的代码解释了如何根据用户的登录凭据从 Active Directory 检索用户。我们需要使用括号中包含的特定 Active Directory 查询语言,它包含像“JohnAccountName”这样的名称和像 Active Directory 中一样的用户名。一旦找到 DirectoryEntry,就可以编码新的 DirectoryEntry 对象,该对象链接到结果并在连接中使用管理员的登录详细信息。

创建验证用户

要为 Active Directory 创建经过身份验证的用户,我们需要将有效的 LDAP 路径字符串传递给 DirectoryEntry 类构造函数,它遵循 LDAP://Doamin_name 的格式。我们来看看下面的方法,

private bool AuthenticateUser(string domain_name, string user_name, string password)
{
bool result = false;
try
{
DirectoryEntry obj_de = new DirectoryEntry("LDAP://" + domainName, userName, password);
DirectorySearcher obj_dsearch = new DirectorySearcher(obj_de);
SearchResult _sResult = null;
sResult = obj_dsearch.FindOne();
result = true;
}
catch
{
result = false;
}
return result;
}
登录后复制

使用 C# 更改 Active Directory 中的用户详细信息

在C#中更改Active Directory对象的属性在C#中很简单,首先访问DirectoryEntry属性字段并根据需要更改值,然后检查它是否为空,最后调用该函数ComminChanges 执行并保存所做的更改。让我们看一下下面的代码,它显示了更改用户的 name 属性,

DirectoryEntry obj_de = Reterieve_User ("smith.rio");
if (obj_de!= null)
{
if (obj_de.Properties["displayName"] != null && obj_de.Properties["displayName"].Value != null)
{
de.Properties["displayName"].Value = "Smith, Rio (Welcome)";
de.CommitChanges();
}
}
登录后复制

The above code describes the CommitChanges(), which will save the changes made in the Active Directory. The most important thing is that whatever changes are made will not be immediately visible in the applications of Active Directory like users of Active Directory and computers in the control panel it takes around 5-30 minutes to visible during changes because it needs to synchronize over the servers all through the network.

Querying Multiple Users in Active Directory with C# ASP .NET

The code above explained was to query the single DirectoryEntry object, whereas if we required for the list of objects we need to use the type SearchResultCollection joined with obj_deSearch, to search out all the things instead of finding one,

SearchResultCollection findUsers = retrieve_allUsers();
if (findUsers!= null && findUsers.Count > 0)
{
foreach (SearchResult getUser in findUsers)
{
DirectoryEntry obj_de = getUser.GetDirectoryEntry();
}
}
登录后复制

Conclusion

In this article, I have explained about the Active Directory and how to retrieve details of users, system usage, groups, and also to authenticate the user. By using some classes, we can easily retrieve the details from the active directory (AD) database. Active Directory with C# is a foremost tool for enterprise networks and for businesses. When designing with web applications which suit for desktop applications to the web to make powerful organizations.

以上是使用 C# 的活动目录的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!