[英]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.Domain
和System.DirectoryServices.ActiveDirectory.DomainController
來獲取此DomainManager.DomainName
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.