現在、レガシ ASP アプリケーションを Windows Server 2000 および IIS5 から Windows Server 2008 および IIS7 に移行しようとしています。このアプリケーションの認証では、ISAPI フィルターを使用します。1 つの問題を除いて、アプリケーションと ISAPI フィルタの両方が新しい環境で動作します。問題のアプリケーションは、ルート アプリケーションになるように設定されています (たとえば、 http://hostname/application.aspにアクセスしてアクセスします)。記載された URL でアクセスすると、認証の詳細が要求され、ISAPI フィルターが正しいログインの詳細を渡されて、その処理を実行します。次に、application.asp を指す既定のドキュメントを IIS7 に追加しました。http://hostnameにアクセスしてアプリケーションにアクセスすると、ISAPI フィルターに間違ったログイン情報が渡されます。ISAPI フィルターは、次のメソッドを実装します。
DWORD CMyISAPIFilter::OnAuthentication(CHttpFilterContext* pCtxt, PHTTP_FILTER_AUTHENT pAuthent)
その中で、pAuthent オブジェクトは、ISAPI フィルターを呼び出すときに IIS によって渡され、通常は認証ダイアログに入力された値を保持する pszUser プロパティを持ちます。私の場合 (既定のドキュメント エントリを使用して Web サイトにアクセスする場合)、pszUser プロパティは、代わりにアプリケーション プールを実行している Windows アカウントの値を保持します。わかりやすくするために、application.asp 部分に入力すると、ISAPI フィルターに正しい値が渡されます。
私はこの問題にかなり困惑しており、解決方法についての手がかりがありません。問題を解決するために、ISAPI フィルターを実際に再構築/変更することはできず、IIS の管理に関してはまったくの初心者です。
また、IIS に既定のドキュメント機能がインストールされていない場合でも、認証が機能することがわかりました。この機能がなければ、デフォルトのドキュメントは (当然のことながら) 機能しませんが、認証は機能します。認証が失敗するのは、デフォルト ドキュメント機能を追加した後でのみです。
ご協力いただきありがとうございます!