[ad_1]
C# で AD 認証を実行中に、「ユーザー名またはパスワードが正しくありません例外」という例外が発生します。 私は C# で asp.net を使用しており、フレームワークは 4.6.1 です。 Windows 認証モードを有効、匿名を無効に設定しました。 コードに到達すると例外が発生します
SearchResult sr = ds.FindOne();
.それまでは例外はありません。 ドメイン、ドメインユーザーをすべて正しく取得しています。
私が試したこと:
私のコードは以下のとおりです:
Common.WriteDDSLog("ValidateWindowsUser()-Process Started for LoginId:" + txtLoginID.Text); //Added by Varun T V //Checks the user is active or not before sending credentials to Active Directory //Will send request to AD only when user is active BLL_Users objUser = new BLL_Users(); string errorCode = "", errorMsg = ""; DataSet dsUserExists = new DataSet(); dsUserExists = objUser.CheckUserActiveOrExists(txtLoginID.Text.Trim(), ref errorCode, ref errorMsg); if (dsUserExists.Tables[0].Rows.Count > 0) { // Directory path string path = "LDAP://" + Domain; DirectoryEntry de = new DirectoryEntry(path); // Provide credentials to get to domain de.Username = Domain + "\\" + sUser; de.Password = sPassword; de.AuthenticationType = AuthenticationTypes.Secure; // Search result DirectorySearcher ds = new DirectorySearcher(de, null, new string[] { "distinguishedName" }); SearchResult sr = ds.FindOne(); if (sr != null) { bSearchResult = true; } }
解決策 1
質問にはエラーメッセージは記載されていません。 資格情報が正しくない場合、ds.FindOne() メソッドは AD への接続にユーザーの資格情報を依存しているため、例外をスローすることに注意してください。 この方法は、資格情報を検証する最も効率的な手段ではない可能性があります。 パフォーマンスの向上のために。 .NET 3.5 以降で作業している場合 (はい、4.6.1 を使用しています)、 System.DirectoryServices.AccountManagement
名前空間を使用して資格情報を簡単に確認します。
C#
// create a "principal context" - e.g. your domain (could be machine, too) using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN")) { // validate the credentials bool isValid = pc.ValidateCredentials("myuser", "mypassword"); }
参考: ここですべてを読んでください:
[^]
Attention Required! | Cloudflare
[ad_2]
コメント