Active Directory身份验证

时间:2011-02-12 06:15:33

标签: asp.net active-directory

我正在使用以下代码对Active Directory中的用户进行身份验证,但密码是以明文形式发送的。如何散列我的密码然后将其发送到Active Directory?

DirectoryEntry entry = new DirectoryEntry(path, username, pwd);
try
{
   //Bind to the native AdsObject to force authentication.
   object obj = entry.NativeObject;

   DirectorySearcher search = new DirectorySearcher(entry);

   search.Filter = "(SAMAccountName=" + username + ")";
   search.PropertiesToLoad.Add("cn");
   SearchResult result = search.FindOne();

   if (null == result)
   {
      return false;
   }

   //Update the new path to the user in the directory.
   _path = result.Path;
   _filterAttribute = (string)result.Properties["cn"][0];
}
catch (Exception ex)
{
   throw new Exception("Error authenticating user. " + ex.Message);
}

return true;

1 个答案:

答案 0 :(得分:6)

如果您使用的是.NET 3.5,那么我强烈建议您切换到使用System.DirectoryServices.AccountManagement命名空间(阅读所有相关内容:Managing Directory Security Principals in the .NET Framework 3.5)。

S.DS.AM中有很多事情要容易得多 - 就像验证用户一样:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
ctx.ValidateCredentials("test", "test", ContextOptions.SecureSocketLayer);

安全执行此操作的唯一方法是指定ContextOptions.SecureSocketLayer选项以强制使用受SSL保护的连接。

如果您无法转到.NET 3.5和S.DS.AM,则需要查看DirectoryEntry DirectoryEntry entry = new DirectoryEntry(path, username, pwd, AuthenticationTypes.SecureSocketsLayer); 中可以定义的AuthenticationTypes

{{1}}

没有其他方法可以做到这一点,我担心 - 我认为在客户端没有任何方法可以像Windwos Server / Active Directory那样对密码进行哈希处理,并传入散列值......