none
DirectorySearcher で Active Directory 情報を取得できない RRS feed

  • 質問

  • System.DirectoryServices 名前空間の DirectorySearcher、DirectoryEntry を使用し、Active Directory に、指定したユーザー/パスワードのユーザーが存在するか確認したいのですが、Active Directory の情報を取得する箇所でエラーになってしまします。

    Active Directory の情報を参照する場合、IIS、Web.config に特別な設定が必要なのでしょうか?
    (他の処理で HttpContext.Current.User.Identity.Name を使用するため IISをWindows認証にしています)

    Active Directory へのアクセス権限の設定が不足している?
    この場合、必要となる権限と権限を付与するユーザーを教えてください。

    同じ Active Directory に参加しているユーザーでPCにログインし、
    他のユーザーの情報を取得しようとしています。

    現在実行環境がないため、詳細なエラー情報は不明です。

    ■ソースコード

    string user = "入力したユーザー";
    string pass = "入力したパスワード";
    DirectorySearcher searcher = new DirectorySearcher("(samAccountName=" + user + ")");
    SearchResultCollection srcol = searcher.FindAll();    // ここでエラー
    string path = srcol[0].Path;
    DirectoryEntry entry = new DirectoryEntry(path, user, pass);

    ■環境
    Windows Server 2008R2
    IIS 7.5
    ASP.NET C# 2005

    ■認証設定
    IISの認証:Windows認証のみ有効
    ASP.NETのWeb.config
     authentication:Windows
     authorization:allow users="*"、deny users="?"


    • 編集済み gbracer 2013年9月3日 14:52
    2013年9月3日 14:51

すべての返信

  • チャブーンです。

    DirectorySearcherクラスで一人のユーザーを探す場合、.Findone()メソッドがひつようなのではないでしょうか?

    2013年9月4日 0:50
  • チャブーンさん、返信ありがとうございます。

    提示する情報が不足していました。すみません。
    別の Active Directory 環境で実行した場合には情報が取得できていたため、ユーザー権限か、IISの設定ではないかと思い質問させて頂きました。

    よろしくお願いします。

    ■情報を取得できた環境
    (質問とは Active Directory を含め、全て別環境です)
    Windows Server 2003、2008R2
    IIS 6.0、7.5
    ASP.NET C# 2005
    2013年9月4日 15:15
  • 認証しただけでは、認証されたユーザー名をHttpContext.Current.User.Identity.Nameに格納するだけでありIIS / ASP.NETはまだIISの権限で動作します。ASP.NETの偽装を行うことで認証したユーザーの権限で動作するようになります。

    # 偽装で解決するか別の問題が発生するかはちょっとわかりません。

    • 回答の候補に設定 佐伯玲 2013年9月6日 0:38
    2013年9月5日 0:54
  • 佐祐理さん、返信ありがとうございます。
    遅くなってしまい申し訳ありません。

    ASP.NETの偽装ですが、IISの認証設定画面にもASP.NETの偽装という項目があります。
    Web.config に impersonate="true"、userName、password を設定するだけで良いのでしょうか?

    また、どのような権限を持ったユーザーを設定すれば良いのでしょうか?

    (IIS、Web.config ともに偽装設定(ユーザー指定なし)で試したのですが
     質問のコードでは Active Directory 情報を取得できませんでした)

    よろしくお願いします。
    2013年9月13日 7:42