我目前正在尝试将旧版 ASP 应用程序从 Windows Server 2000 和 IIS5 迁移到 Windows Server 2008 和 IIS7。此应用程序的身份验证使用 ISAPI 过滤器。除了一个问题外,应用程序和 ISAPI 过滤器都可以在新环境中工作。有问题的应用程序被设置为根应用程序(就像您通过访问http://hostname/application.asp来访问它一样)。如果我通过指定的 URL 访问它,它会询问我的身份验证详细信息,ISAPI 过滤器会通过正确的登录详细信息,然后执行它的操作。然后我在 IIS7 中添加了一个默认文档以指向 application.asp。现在,如果我通过访问http://hostname访问应用程序,ISAPI 过滤器会传递错误的登录详细信息。ISAPI 过滤器实现了这个方法:
DWORD CMyISAPIFilter::OnAuthentication(CHttpFilterContext* pCtxt, PHTTP_FILTER_AUTHENT pAuthent)
其中,pAuthent 对象在调用 ISAPI 过滤器时由 IIS 传入,并且具有 pszUser 属性,该属性通常保存在身份验证对话框中输入的值。在我的情况下(使用默认文档条目访问网站时),pszUser 属性保存的是运行应用程序池的 Windows 帐户的值。为了清楚起见,如果我在 application.asp 部分中键入,ISAPI 过滤器将传递正确的值。
我对这个问题感到很困惑,并且不知道如何解决它。为了使事情顺利进行,我无法真正重建/修改 ISAPI 过滤器,而且在 IIS 管理方面我是初学者。
我还发现,如果 IIS 没有安装默认文档功能,则身份验证有效。如果没有此功能,默认文档(自然)不起作用,但身份验证可以。只有在我添加了默认文档功能之后,身份验证才会中断。
谢谢你的帮助!