2 つのドメイン ユーザー アカウントを取得しました。1 つは小文字のユーザー名で、もう 1 つは "JohnSmith" のように大文字と小文字が混在するユーザー名です。ValidateCredentials は、小文字のユーザー名に対して正常に機能します。ただし、大文字と小文字が混在するユーザー名の場合は、常に false が返されます。
PrincipalContext myDomain = new PrincipalContext(ContextType.Domain, "MyDomain");
bool loginSucceded = myDomain.ValidateCredentials(userName, password);
次のコードを使用して、両方のアカウントのプロパティを確認できます (両方とも有効になっています)。プロパティ LastBadPasswordAttempt は、ValidateCredentials が誤ったパスワードが原因でなく false を返すことを示唆しています。
PrincipalContext myDomain = new PrincipalContext(ContextType.Domain, "MyDomain");
UserPrincipal user = UserPrincipal.FindByIdentity(myDomain, IdentityType.SamAccountName, userName);
if (user != null)
{
Console.WriteLine("Name: " + user.Name);
Console.WriteLine("DisplayName: " + user.DisplayName);
Console.WriteLine("BadLogonCount: " + user.BadLogonCount);
Console.WriteLine("Enabled: " + user.Enabled);
Console.WriteLine("LastLogon: " + user.LastLogon);
Console.WriteLine("LastBadPasswordAttempt: " + user.LastBadPasswordAttempt);
}
大文字と小文字が混在するユーザー名を小文字に変換して渡すことも役に立ちませんでした。
UPD: kyndigs のコメントに応えて、ValidateCredentials を使用するアプリケーションの問題を調査する一環です。何人かのユーザーが、ログインできないと報告しており、それらのユーザーのユーザー名には大文字と小文字が混在しています。