从 Net Core 2.0 中的活动目录中获取所有用户
Get all users from active directory in NetCore 2.0
所有问题都与.NET Framework 有关,但与.NET Core 无关。我正在寻找如何从 NETCORE 中的 AD 组获取所有用户信息。
我正在使用 Novell.Directory.Ldap 程序包连接到 Ldap 以验证我的用户。
Project.csproj
<PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="2.3.8" />
Code.cs
using Novell.Directory.Ldap;
public bool LoginLdap(string username, string password)
{
LdapConnection connection = new LdapConnection();
var loggedIn = false;
try
{
connection.Connect(_config["Ldap:url"], LdapConnection.DEFAULT_PORT);
connection.Bind(LdapConnection.Ldap_V3, _config["Ldap:domain"] + @"\" + username, password);
loggedIn = true;
}
catch
{
loggedIn = false;
}
connection.Disconnect();
return loggedIn;
}
Config.json
"Ldap": {
"url": "[Ldap URL]",
"domain": "[Domain Name]"
}
如果您只计划 运行 在 Windows 中使用您的应用程序,您可以像在完整的 .NET Framework 中一样添加 Microsoft.Windows.Compatibility
to your project from NuGet, which includes the System.DirectoryServices
namespace, so you can use DirectoryEntry
/DirectorySearcher
or the AccountManagement
命名空间。
但是如果您计划 运行 在其他 OS 上使用这个,那么我认为唯一的选择是 Novell 的库,正如史蒂夫在他的回答中提到的那样。
我使用的是 .Net Core 3.1,但您也可以使用 .Net Core 2。
首先安装 NuGet 包“System.DirectoryServices.AccountManagement”
然后,您可以使用下面的代码获取所有AD用户:
using System.DirectoryServices.AccountManagement;
public static List<ADUser> GetADUsers() {
var myDomainUsers = new List<ADUser>();
using (var ctx = new PrincipalContext(ContextType.Domain, "yourdomain"))
{
var userPrinciple = new UserPrincipal(ctx);
using (var search = new PrincipalSearcher(userPrinciple))
{
foreach (UserPrincipal domainUser in search.FindAll().OrderBy(u => u.DisplayName))
{
var adUser = new ADUser() {
Description = domainUser.Description,
DisplayName = domainUser.DisplayName,
DistinguishedName = domainUser.DistinguishedName,
EmailAddress = domainUser.EmailAddress,
Name = domainUser.Name,
EmployeeId = domainUser.EmployeeId,
GivenName = domainUser.GivenName,
MiddleName = domainUser.MiddleName,
Surname = domainUser.Surname,
SamAccountName = domainUser.SamAccountName
};
myDomainUsers.Add(adUser);
} //foreach
} //using
} //using
return myDomainUsers;
} //GetADGroups
我在哪里使用以下 ADUser class:
public class ADUser
{
public string SamAccountName { get; set; }
public string Description { get; set; }
public string DisplayName { get; set; }
public string DistinguishedName { get; set; }
public string EmailAddress { get; set; }
public string EmployeeId { get; set; }
public string Name { get; set; }
public string GivenName { get; set; }
public string MiddleName { get; set; }
public string Surname { get; set; }
}
您可以从 AD 中提取更多属性。看看UserPrincipal class
所有问题都与.NET Framework 有关,但与.NET Core 无关。我正在寻找如何从 NETCORE 中的 AD 组获取所有用户信息。
我正在使用 Novell.Directory.Ldap 程序包连接到 Ldap 以验证我的用户。
Project.csproj
<PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="2.3.8" />
Code.cs
using Novell.Directory.Ldap;
public bool LoginLdap(string username, string password)
{
LdapConnection connection = new LdapConnection();
var loggedIn = false;
try
{
connection.Connect(_config["Ldap:url"], LdapConnection.DEFAULT_PORT);
connection.Bind(LdapConnection.Ldap_V3, _config["Ldap:domain"] + @"\" + username, password);
loggedIn = true;
}
catch
{
loggedIn = false;
}
connection.Disconnect();
return loggedIn;
}
Config.json
"Ldap": {
"url": "[Ldap URL]",
"domain": "[Domain Name]"
}
如果您只计划 运行 在 Windows 中使用您的应用程序,您可以像在完整的 .NET Framework 中一样添加 Microsoft.Windows.Compatibility
to your project from NuGet, which includes the System.DirectoryServices
namespace, so you can use DirectoryEntry
/DirectorySearcher
or the AccountManagement
命名空间。
但是如果您计划 运行 在其他 OS 上使用这个,那么我认为唯一的选择是 Novell 的库,正如史蒂夫在他的回答中提到的那样。
我使用的是 .Net Core 3.1,但您也可以使用 .Net Core 2。
首先安装 NuGet 包“System.DirectoryServices.AccountManagement”
然后,您可以使用下面的代码获取所有AD用户:
using System.DirectoryServices.AccountManagement;
public static List<ADUser> GetADUsers() {
var myDomainUsers = new List<ADUser>();
using (var ctx = new PrincipalContext(ContextType.Domain, "yourdomain"))
{
var userPrinciple = new UserPrincipal(ctx);
using (var search = new PrincipalSearcher(userPrinciple))
{
foreach (UserPrincipal domainUser in search.FindAll().OrderBy(u => u.DisplayName))
{
var adUser = new ADUser() {
Description = domainUser.Description,
DisplayName = domainUser.DisplayName,
DistinguishedName = domainUser.DistinguishedName,
EmailAddress = domainUser.EmailAddress,
Name = domainUser.Name,
EmployeeId = domainUser.EmployeeId,
GivenName = domainUser.GivenName,
MiddleName = domainUser.MiddleName,
Surname = domainUser.Surname,
SamAccountName = domainUser.SamAccountName
};
myDomainUsers.Add(adUser);
} //foreach
} //using
} //using
return myDomainUsers;
} //GetADGroups
我在哪里使用以下 ADUser class:
public class ADUser
{
public string SamAccountName { get; set; }
public string Description { get; set; }
public string DisplayName { get; set; }
public string DistinguishedName { get; set; }
public string EmailAddress { get; set; }
public string EmployeeId { get; set; }
public string Name { get; set; }
public string GivenName { get; set; }
public string MiddleName { get; set; }
public string Surname { get; set; }
}
您可以从 AD 中提取更多属性。看看UserPrincipal class