繁体   English   中英

C#通过套接字连接在Active Directory中验证用户

[英]C# verify user in Active Directory from Socket conection

自成立以来,我就是.Net开发人员。 但是上一次很有趣。 我出于个人目的编写了网络基础dll,并开始编写合适的iOS客户端应用。 一切正常,但是现在我有点想不自己管理用户数据,而是使用Active Directory的现有数据。 将纯文本的用户名和密码从应用程序发送到服务器并进行验证不是什么问题,但这并不像我希望的那样安全。 我个人最喜欢的方式是:

  1. 将用户名从应用发送到服务器
  2. 通过用户名和质询从广告中获取质询的密码哈希
  3. 向客户发送挑战
  4. 使用挑战对密码进行哈希处理
  5. 将哈希发送回服务器,并检查哈希是否匹配

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

我的问题是,有没有办法从广告中获取用户的哈希密码,我是否会遇到挑战? 还是有另一种简单的方法来提供一种简单安全的方法来验证不在本地网络中的用户?

提前非常感谢你

最好的问候弗洛里安

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

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

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

在客户端加密密码,然后将加密的消息发送到服务器。 服务器是唯一具有私钥的服务器,因此可以读取密码并使用PrincipalContexts ValidateCredentials方法对其进行PrincipalContexts ValidateCredentials (如itsme86所建议的)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM