添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

ASP.NET

We need to add System.DirectoryServices DLL reference in our project. In packages.config file, we can add the below package or install it using NuGet .

< packages > < package id =" System.DirectoryServices" version =" 4.7.0" targetFramework =" net461" / > < /packages >

Here is the manager class, Validate(string userId, string password) method will validate things from LDAP server.

* Links: * https://www.nuget.org/packages/System.DirectoryServices/ using System.DirectoryServices; namespace DotNet /// < summary > /// Ldap related contracts /// < /summary > public interface ILdapValidator /// < summary > /// Check if user in Ldap /// < /summary > /// < param name="userId" > Ldap user name without domain name < /param > /// < param name="password" > Ldap passsword < /param > bool Validate( string userId, string password); /// < summary > /// Ldap related tasks manager /// < /summary > public class LdapManager : ILdapValidator /// < summary > /// Domain name from config file /// < /summary > public readonly string DomainName; /// < summary > /// Port name form config file, default 389 /// < /summary > public readonly int PortNumber; public LdapManager( string domainName, int port = 389 ) DomainName = domainName; PortNumber = port; /// < summary > /// Check if user in Ldap /// < /summary > /// < param name="userId" > Ldap user name without domain name < /param > /// < param name="password" > Ldap passsword < /param > public bool Validate( string userId, string password) string path = LdapPath(); string username = UserFullId(userId); DirectoryEntry de = new DirectoryEntry (path, username, password, AuthenticationTypes.Secure); DirectorySearcher ds = new DirectorySearcher(de); ds.FindOne(); return true ; catch (DirectoryServicesCOMException ex) return false ; /// < summary > /// User full id /// < /summary > /// < param name="userId" > User name < /param > /// < returns > userName@domain < /returns > public string UserFullId( string userId) string value = string .Format( @" {0}@{1}" , userId, DomainName); return value ; /// < summary > /// Get Ldap path from domain and port /// < /summary > /// < returns > < /returns > public string LdapPath() string value = string .Format( @" LDAP://{0}:{1}" , DomainName, PortNumber); return value ;

Here, we are using the LDAP manager class to validate username and password:

string domain = " LdapdomainNameOrIp.com" ; int port = 389 ; string user = " user.name" ; string password = " password@123" ; bool isValied = new LdapManager(domain, port).Validate(user, password);

ASP.NET Core

We need to add Novell.Directory.Ldap DLL reference in our project. In .csproj file, we can add the below package or install it from NuGet .

< ItemGroup > < PackageReference Include =" Novell.Directory.Ldap.NETStandard" Version =" 2.3.8" / > < /ItemGroup >

Here is the manager class, Validate(string userId, string password) method will validate things from LDAP server.

* Links: * https://www.nuget.org/packages/Novell.Directory.Ldap.NETStandard/2.3.8 using Novell.Directory.Ldap; using System; namespace DotNetCore /// < summary > /// Ldap related contracts /// < /summary > public interface ILdapValidator /// < summary > /// Check if user in Ldap /// < /summary > /// < param name="userId" > Ldap user name without domain name < /param > /// < param name="password" > Ldap passsword < /param > bool Validate( string userId, string password); /// < summary > /// Ldap related tasks manager /// < /summary > public class LdapManager : ILdapValidator /// < summary > /// Domain name from config file /// < /summary > public readonly string DomainName; /// < summary > /// Port name form config file, default 389 /// < /summary > public readonly int PortNumber; public LdapManager( string domainName, int port = 389 ) DomainName = domainName; PortNumber = port; /* LdapConnection.DEFAULT_PORT*/ /// < summary > /// Check if user in Ldap /// < /summary > /// < param name="userId" > Ldap user name without domain name < /param > /// < param name="password" > Ldap passsword < /param > public bool Validate( string userId, string password) string username = UserFullId(userId); using ( var connection = new LdapConnection { SecureSocketLayer = false }) connection.Connect(DomainName, PortNumber); connection.Bind(username, password); return connection.Bound; catch (LdapException ex) return false ; /// < summary > /// User full id /// < /summary > /// < param name="userId" > User name < /param > /// < returns > userName@domain < /returns > public string UserFullId( string userId) string value = string .Format( @" {0}@{1}" , userId, DomainName); return value ;

Here, we are using the LDAP manager class to validate username and password:

string domain = " LdapdomainNameOrIp.com" ; int port = 389 ; string user = " user.name" ; string password = " password@123" ; bool isValied = new LdapManager(domain, port).Validate(user, password);

Source Code

It is a Visual Studio 2017 solution with console projects:

  • DotNet: .NET Framework 4.6.1
  • DotNetCore: .NET Core 2.2
  • References

  • Validate a username and password against Active Directory?
  • Application Login through Active Directory (LDAP)
  • ASP.NET Core 2.0 LDAP Active Directory Authentication
  • Working with DirectoryServices in ASP.NET Core
  • Limitations

  • The LDAP path may not be simple as mine so fix it as needed.
  • The code may throw an error for untested inputs, if may please let me know
  • History

  • 15 th July, 2020: Initial version
  •