【解決方法】C# で AD 認証を行う際に、間違ったユーザー名またはパスワードの例外を解決するにはどうすればよいですか?

プログラミングQA

[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");
}

参考: ここですべてを読んでください:

[^]

[ad_2]

コメント

タイトルとURLをコピーしました