簡體   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