2017-05-15 9 views
0

Active Directory経由でユーザーを認証するアプリケーションを構築しています。ユーザーの追加や編集ではなく、資格情報の検証だけです。私はこれに関する多くの記事を見つけました - いくつかはSystem.DirectoryServices.AccountManagement(.NET 3.5以上)またはLDAP DirectoryEntryを使用しています...Active Directoryが自動検出される時期

私はADサーバーのURLを指定する必要があるかどうかを判断しようとしていますか?私がテストするとき、何も指定する必要はありませんか?

  1. ADサーバーはいつ自動検出されますか?いつURLを指定する必要がありますか?

  2. 自動検出されたADサーバーのURLを取得するための呼び出しはありますか?あなたがドメインまたはパスを指定せずに、ドメインPrincipalContextまたはDirectoryContextを作成すると

答えて

1

、現在のコンテキストが使用されています。つまり、コードが実行されているアカウントです。コードがドメインにないアカウントで実行されている場合、例外がスローされます。これにより、Windowsフォームアプリケーションまたはサービスで実行されている天気が適用されます。

は、すべてを行う必要があるドメインに対して資格情報を検証するには、次の

public bool ValidateCredentials(string username, string password) 
{ 
    using (var principalcontext = new PrincipalContext(ContextType.Domain)) 
    { 
     return principalContext.ValidateCredentials(username, password); 
    } 
} 

しかし、これは多くの理由のためにこれを行うための最善の方法ではありません。例えば、ValidateCredentialsは、第二など、ユーザーが期限切れのパスワードにログインできない場合でもtrueを返すことができ、デスクトップ・アプリケーションのシングルサインオンActive Directoryを使用する方がはるかに簡単な方法があります:

var currentUser = UserPrincipal.Current; 

これを返します現在のユーザーのプリンシパル、再認証する必要はありません.Windowsは既にそれを行いました。したがって、ユーザーは既に有効であることがわかります。

+0

多くの理由は何ですか?私は現在のユーザーをしたいだけでなく、UserPrincipal.Currentは機能しません。私は私のユーザーが別のユーザーとしてもログインできるようにします。何がお勧めですか? –

+1

同じADの下のdiffドメインについてはどうですか?これは効果がありますか? PrincipalContext oPrincipalContext =新しいPrincipalContext(ContextType.Domain、otherDomainName); –

+1

@MikeTurner次に、現在のユーザーがドメインの一部である限り、自分の答えに1番目のコード例を使用できます。認証チェックに使用するドメイン、ユーザー名、パスワードを指定しないと、 – Ashigore

関連する問題