C#从套接字连接验证Active Directory中的用户

本文关键字:Directory 用户 Active 验证 套接字 连接 | 更新日期: 2023-09-27 18:27:41

从.Net诞生之初,我就是一名开发人员。但上一次很有趣。我为自己的目的写了一个网络基础dll,并开始编写合适的iOS客户端应用程序。一切都很好,但现在我想不是自己管理用户数据,而是使用Active Directory的现有数据。将明文用户名和密码从应用程序发送到服务器并进行验证不会有任何问题,但这并不像我希望的那样安全。我个人最喜欢的方式是:

  1. 将用户名从应用程序发送到服务器
  2. 通过用户名和质询从AD获取质询密码哈希
  3. 将质询发送给客户端
  4. 通过挑战对密码进行散列
  5. 将散列发送回服务器,并检查散列是否匹配

非常简单直接的方式。我不需要处理证书,可以提供基本的安全保障。我知道,在现代,这不是最安全的方式。但这足以满足我的需要。

我的问题是,有没有办法从广告中获得用户的哈希密码?我能接受挑战吗?或者还有其他简单的方法可以提供一种简单安全的方式来验证不在本地网络中的用户吗?

提前非常感谢

致以最良好的问候Florian

C#从套接字连接验证Active Directory中的用户

您是否尝试过使用System.DirectoryServices.AccountManagement?验证登录非常简单:

bool authenticated;
using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain))
{
    authenticated = domainContext.ValidateCredentials(username, password);
}

正如您所说,这应该是一个基本的身份验证,但不需要通过网络发送普通密码。因此,我建议使用非对称加密的解决方案。

在客户端加密密码,并将加密的消息发送到服务器。服务器是唯一拥有私钥的服务器,因此可以读取密码并使用PrincipalContexts ValidateCredentials方法进行验证(就像它的me86建议的那样)。

因此,应用程序的步骤可能是:

  1. 从应用程序向服务器请求公钥
  2. 从服务器获取公钥
  3. 用公钥加密密码
  4. 将加密的密码和用户名一起发送回服务器
  5. 服务器解密凭据并根据AD对其进行验证