序章
Active Directory を照会する従来の ASP.NET 3.5 アプリケーションを維持しています。アプリケーションは「統合 Windows 認証」を使用し、専用のユーザー名とパスワードではなく、独自のセキュリティ コンテキストを使用して Active Directory に接続するように設計されています。
関連するコードは次のとおりです。
using (DirectoryEntry root = new DirectoryEntry())
using (DirectorySearcher searcher = new DirectorySearcher(root))
{
searcher.Filter = string.Format("(&(samAccountName={0})(objectClass=user)(objectCategory=person))", userName.Trim());
SearchResultCollection results = searcher.FindAll();
}
ASP.NET 3.5 を使用していますが、既存のインフラストラクチャの制約により、ASP.NET 4.0 アプリケーション プールから実行できる必要があります。
問題
を呼び出すとFindAll
、特定の状況下で次の例外がスローされます。
System.DirectoryServices.DirectoryServicesCOMException (0x80072020): 操作エラーが発生しました。
Visual Studio デバッガーで例外オブジェクトを調べると、ExtendedErrorMessage
プロパティにはより詳細な情報が含まれています。
000004DC: LdapErr: DSID-0C0906E8、コメント: この操作を実行するには、接続でバインドを成功させる必要があります。、データ 0、v1db1
次のスクリーンショットは、これが Visual Studio のデバッガーでどのように表示されるかを示しています。
機能するもの
これを機能させるための回避策をいくつか見つけましたが、どれも受け入れられません。
- 統合 Windows 認証を無効にし、代わりに基本認証を使用します。
- IIS では、 Network Serviceアカウントと ASP.NET の偽装を無効にして、ASP.NET 2.0 でアプリケーションを実行します。
- ホスト名としてlocalhostを使用して、Web サーバーからのみアプリケーションにアクセスします。
- web.config でハードコーディングされたアカウントで ASP.NET 偽装を使用する。
機能しないもの
インターネットからいくつかの提案を見つけましたが、どれも問題を完全に解決するものではありませんでした:
- を使用し
HostingEnvironment.Impersonate()
ます。 - なりすましの無効化。
私が欲しいもの
Active Directory で何も再構成する必要なく、これを機能させたいと考えています。上記のように特定の IIS 構成で問題なく動作するので、アプリケーションまたは IIS の再構成 (.NET Framework のバージョンの変更を除く) で動作させることができるはずです。