1

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  <<

私がやろうとしていることをすることさえ可能ですか?私は何が欠けていますか?

4

1 に答える 1

2

問題が見つかりました。

この場合、ASP.NET Impersonation:EnabledIIS と Web.Config を使用すると、構成したアプリケーション プール ID と競合していました。(おもう)。

AD を照会するために認証された適切なアカウントを使用して実行するようにアプリケーション プール ID を設定し、偽装を無効にして終了Windows Authentication:Enabledすると、コードで資格情報を渡すことなく Web サイトで AD を照会することができました。

于 2013-03-11T15:03:18.923 に答える