簡體   English   中英

使用PrincipleContext使用sAMAccountName格式向AD進行身份驗證

[英]Authenticating to AD using sAMAccountName format using PrincipleContext

我正在為脫機應用程序實現AD身份驗證。

我的原始代碼執行以下操作:

var validAuth = false;
using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain))
{
    validAuth = context.ValidateCredentials(_viewModel.Username, txtPassword.Password);
}

但是,在測試過程中注意到,這導致帳戶鎖定是“ AD組策略”嘗試次數的一半-因此,如果在鎖定之前將策略設置為4次嘗試,則用戶將被鎖定為2次。

我在Google上搜索了一下,發現這篇文章在MSDN和TL上; DR是這樣的:

聽起來,如果您使用UPN格式(Domain @ sAMAccountName),則錯誤的密碼計數將增加2,但是,如果您使用sAMAccountName格式(Domain \\ sAMAccountName),則密碼計數將每次增加1。

鑒於此,我將代碼更改為:

var validAuth = false;
using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain))
{
    var usernameToAuth = string.Format("{0}\\{1}", Environment.UserDomainName, _viewModel.Username);
    validAuth = context.ValidateCredentials(usernameToAuth, txtPassword.Password);
}

但是,無論輸入如何,現在都無法進行身份驗證。 如果我將其更改為使用user @ domain的舊式UPN格式,則它可以很好地進行身份驗證-但很顯然,這將占用兩個身份驗證請求。

MSDN帖子說使用sAMAccountName格式作為變通辦法,但是我正在努力研究如何做到這一點。 我的原始代碼也沒有明確使用舊的UPN格式-我只是將用戶名直接傳遞給ValidateCredentials方法(在任何地方都看不到@符號),因此該方法是否首先使用舊的UPN方法?

請提供任何建議-我特別不想將用戶可以進行的錯誤登錄嘗試減少一半。

我用的域名規范PrincipalContext的構造,在此規定 ,這樣的:

    public static bool IsAuthenticated(string username_, string password_)
    {
        using (var pc = new PrincipalContext(ContextType.Domain, DomainManager.DomainName))
            return pc.ValidateCredentials(username_, password_);
    }

就我而言,我使用System.DirectoryServices.ActiveDirectory.DomainSystem.DirectoryServices.ActiveDirectory.DomainController來獲取此DomainManager.DomainName值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM