C# · 12月 27, 2021

c# – 如何在.NET中验证LDAP

我想在具有任何目录服务的 Windows操作系统上验证我的应用程序的用户名和密码.例如,它可以是微软活动目录,Novell eDirecotry或SunOne.我已经知道如何使用c#为Microsoft Active Direcotry本机做这个代码. (我完全放弃使用ADSI并创建一个低级别的com组件)

我尝试使用Novel eDirecotory认证的方式是我安装了Mono项目.在单声道项目中,他们为您提供Novell.Directory.ldap.dll代码看起来与Microsoft Active Directory有所不同(http://www.novell.com/coolsolutions/feature/11204.html)

对于SunOne,我被告知要使用与活动目录相同的代码,但是ldap连接字符串有点不同(http://forums.asp.net/t/354314.aspx)
(http://technet.microsoft.com/en-us/library/cc720649.aspx)

为了使我的项目复杂化,大多数客户使用“服务帐户:”,这意味着我需要使用管理用户名和密码进行绑定,才能验证常规用户名和密码.我的问题分为两部分.

1)从上面我已经解释过的是,这是正确的方向,我应该对每一个个性化的服务进行认证?

2)我觉得我根本不需要做任何这个代码.我也觉得使用服务账户的规定根本不重要.如果我所关心的是在Windows机器上验证用户名和密码,为什么甚至需要使用ldap?我的意思是想想.当您早上登录机器时,您不必提供服务帐户登录.我可以通过使用runas功能在DOS提示符下轻松地验证用户名和密码,我将被拒绝,并且可以解析文本文件.我确定有其他方式我可以传递一个用户名和密码到我所在的Windows操作系统,并会告诉我,如果一个用户名和密码对它的域是有效的.我对吗?你们有什么建议的方法吗?

迈克尔·埃文奇克
www.MikeEvanchik.com

解决方法 所有这一切可以用System.DirectoryServices.Protocols完成.如果您创建到目录的LdapConnection,您可以使用服务帐户进行绑定,然后进行后续绑定来验证凭据.

服务帐户通常用于限制对服务器的认证机制的访问.这样一来,街上的随机人员就可以尝试使用LDAP服务器进行身份验证.

另外,您希望每个用户在登录时都能提供其可分辨的名称?使用Active Directory,只需要sAMAccountName,而像eDirectory和Sunone这样的其他提供者则需要使用可分辨名称进行身份验证.

要执行此类型的身份验证,您需要使用提供的服务帐户对服务器进行身份验证,对具有给定用户名的用户执行搜索,并获取用户的可分辨名称.然后,您可以使用该可分辨名称和提供的密码进行身份验证.

这将适用于所有LDAP系统,Active Directory除了仅仅sAMAccountName将是快乐之外.