Active Directory
本文关键字:Directory Active | 更新日期: 2023-09-27 17:58:13
C#应用程序是否可以找到windows domain
上的所有用户,以便该应用程序在domain
之外运行,并且不在同一网络上,可以通过http
?
您需要应用程序的某些组件才能在"区域"内运行,在该区域中它可以查询Active Directory。
这可能是一个作为WCF web服务公开的小型服务器端组件,您可以通过HTTP从任何地方查询所需内容(默认情况下不安全)。
这取决于域的安全设置。当然,从域外绑定到域控制器是可能的,而不是直接通过http。假设他们没有阻止防火墙上的端口,你可以使用常规LDAP连接或依赖.NET中的Active Directory类。很可能你必须使用安全连接,并且它将位于非标准端口上。你需要为连接提供域凭据才能连接。由于您在域之外,您可能还必须指定要绑定的域控制器——请参阅System.DirectoryServices.AccountManagement中的PrincipalContext,特别是允许您提供凭据和控制器名称/端口的构造函数。
公共数据表getActiveDirectoryUsers(){
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name"));
dt.Columns.Add(new DataColumn("POCode"));
dt.Columns.Add(new DataColumn("Active"));
DataRow dtrow;
DirectoryEntry myLdapConnection = createDirectoryEntry();
List<Users> listAlluers = new List<Users>();
DirectorySearcher search = new DirectorySearcher(myLdapConnection);
SearchResult result;
SearchResultCollection resultCol = search.FindAll();
//search.PropertiesToLoad.Add("cn");//user name
//search.PropertiesToLoad.Add("title"); //design
if (resultCol != null)
{
for (int counter = 0; counter < resultCol.Count; counter++)
{
string UserNameEmailString = string.Empty;
result = resultCol[counter];
if (result.Properties.Contains("cn") && result.Properties.Contains("title"))
{
dtrow = dt.NewRow();
dtrow[0] = (String)result.Properties["cn"][0];
dtrow[1] = (String)result.Properties[BusinessLayer.UserConfig.UniqueField][0];
dtrow[2] = (String)result.Properties["useraccountcontrol"][0];
dt.Rows.Add(dtrow);
}
}
}
return dt;
}
static DirectoryEntry createDirectoryEntry()
{
String Path = "LDAP://your.server.Ip";
DirectoryEntry ldapConnection = new DirectoryEntry(Path, "username", "password");
return ldapConnection;
}