Active Directory ユーザー名に基づいてユーザーの電子メール アドレスを検索できるイントラネット Web サイトを作成しようとしています。
私のweb.configには次のものがあります:
<authentication mode="Windows"/>
<identity impersonate="true"/>
そして、次のようにしてユーザーの UserName を取得できます。
Environment.UserName
次のコードを localhost で実行すると、AD にクエリを実行して電子メールを取得できます。
public string GetADUser(string userName)
{
DirectoryEntry entry = new DirectoryEntry();
// get a DirectorySearcher object
DirectorySearcher search = new DirectorySearcher(entry);
// specify the search filter
search.Filter = "(&(objectClass=user)(anr=" + userName + "))";
// specify which property values to return in the search
search.PropertiesToLoad.Add("mail"); // smtp mail address
// perform the search
SearchResult result = search.FindOne();
string email = string.Empty;
if (result != null)
{
if (result.Properties["mail"].Count == 1)
{
email = result.Properties["mail"][0].ToString();
}
else
{
email = "no email";
}
}
else
{
email = "not found";
}
return email;
}
このコードは、デフォルトで資格情報を使用して認証し、ユーザー名を渡してユーザーのメール アドレスを検索できるようにします。
ただし、このテスト コードをサーバーにアップロードすると、localhost 以外の場所からサイトを参照すると、コードが機能しなくなります。
[COMException (0x80072020): An operations error occurred.]
これをグーグルで検索すると、権限の問題があることがわかります。
これを回避するために、アプリケーション プール ID を資格情報に設定しようとしましたが、それでもコードで AD を検索できません。
Web サイト認証は、IIS で次のように構成されます (<< でタグ付けされた有効な項目)。
Anonymous Authentication:Disabled
ASP.NET Impersonation:Enabled <<
Basic Authentication:Disabled
Digest Authentication:Disabled
Forms Authentication:Disabled
Windows Authentication:Enabled <<
私がやろうとしていることをすることさえ可能ですか?私は何が欠けていますか?