using (PrincipalContext Context = new PrincipalContext(ContextType.Domain, DomainURL, UserName, Password))
{
UserPrincipal Account = new UserPrincipal(Context);
Account.GivenName = strFirstName;
Account.Surname = strLastName;
PrincipalSearcher srch = new PrincipalSearcher(Account);
foreach (var principal in srch.FindAll())
{
var p = (UserPrincipal)principal;
String FirstName = p.GivenName;
String LastName = p.Surname;
}
}
上記のコード スニペットに見られるように、プリンシパル コンテキスト コンストラクターでユーザー名とパスワードを指定することにより、ドメイン内の Active Directory への接続を確立しています。
接続が確立されたら、接続された Active Directory に対して FirstName と LastName を照会します。
UserName と Password を渡さない場合、PrincipalContext コンストラクターは、IIS で asp.net アプリケーションをホストしているアプリケーション プールを実行しているアカウントの資格情報を使用して、Active Directory に接続します。
しかし、クエリ対象のドメインにアクセスできるアカウントで実行されるある種のサービスを作成し、そのサービスをホストするアカウント情報 (ユーザー名とパスワード) を使用して、ユーザー名を渡す代わりに AD に接続することが可能かどうか疑問に思っています上記のようにパスワードを直接入力します。
誰かが IIS などでサービスをデプロイし、そのサービスがアカウント X のコンテキストで実行されており、このアカウント X がクエリしたいドメインにアクセスできると仮定すると、そのサービスを PrincipalContext コンストラクターで呼び出して、サービスが実行されている資格情報を使用して、照会する AD に接続します。
ここでの私の意図は、ユーザー名とパスワードを提供することではなく、ASP.NET アプリケーションをホストしているアプリケーション プールが実行されている資格情報を使用しないようにすることです。
外部サービスのセキュリティ コンテキストを使用して AD への接続を確立したいと考えています。