如何在.NET中验证LDAP

Mic*_*hik 13 c# novell ldap

我想在Windows操作系统上使用任何目录服务验证我的应用程序的用户名和密码.例如,它可以是microsoft active directory,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 connecton字符串有点不同.(http://forums.asp.net/t/354314.aspx)(http:// technet. microsoft.com/en-us/library/cc720649.aspx)

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

1)根据我上面所解释的,这是我应该针对每个单独的服务进行身份验证的正确方向吗?

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

Michael Evanchik www.MikeEvanchik.com

Hug*_*are 11

我不确定我是否完全理解这个问题,但在某些情况下,我发现通过简单地搜索他们的帐户并使用他们的凭据作为用户名和密码来验证用户很容易.

成功的查询意味着提供的所有内容都是正确的,而不是找到帐户意味着出错.

//use the users credentials for the query
DirectoryEntry root = new DirectoryEntry(
    "LDAP://dc=domain,dc=com", 
    loginUser, 
    loginPassword
    );

//query for the username provided
DirectorySearcher searcher = new DirectorySearcher(
    root, 
    "(sAMAccountName=" + loginUser + ")"
    );    

//a success means the password was right
bool success = false; 
try {
    searcher.FindOne();
    success = true;
}
catch {
    success = false;
}
Run Code Online (Sandbox Code Playgroud)

可能不是"最佳实践",但可能会解决您遇到的问题......


Jar*_*red 4

所有这些都可以通过 System.DirectoryServices.Protocols 来完成。如果您创建到目录的 LdapConnection,则可以使用要绑定的服务帐户,然后进行后续绑定以验证凭据。

服务帐号一般用于限制对服务器认证机制的访问。这样,街上的任何人都无法尝试使用您的 LDAP 服务器进行身份验证。

另外,您是否希望每个用户在登录时提供其专有名称?对于 Active Directory,仅需要 sAMAccountName,而 eDirectory 和 SunONE 等其他提供程序则需要可分辨名称进行身份验证。

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

这适用于所有 LDAP 系统,但 Active Directory 除外,它只需要 sAMAccountName。