我有很多网站和应用程序,它们都有自己的应用程序池,全部使用 AppPoolIdentity。应用程序池标识非常有用,因为您可以设置文件系统权限并根据这些权限添加 SQL Server 用户,而无需管理任何密码。
我的设置运行良好,直到决定这些网站需要添加基本身份验证。这很好,但 IIS 绝对坚持使用您提供的身份,而不是配置的应用程序池身份,而不管应用程序池本身的任何设置。
问题似乎出在Connect As
对话框中。我已将其设置为使用Application user (pass-through authentication)
。除了令人困惑的命名之外,此选项显然不适合我。所以我尝试使用Specific user
。
该Set Credentials
对话框具有欺骗性,因为它会接受IIS AppPool\[appPool]
没有密码的应用程序池用户,但是当您访问该网站时,您会收到以下错误消息:
HTTP Error 500.19 - Internal Server
The requested page cannot be accessed because the related configuration data for the page is invalid.
Config Error: Can not log on locally to `[websitePath]` as user `IIS AppPool\[appPool]` with virtual directory password
Config File: `\\?\C:\inetpub\temp\apppools\[appPool]\[websiteName].config`
Config Source
153: `<application path="/" applicationPool="[appPool]">`
154: `<virtualDirectory path="/" physicalPath="[websitePath]" userName="IIS AppPool\[appPool]" />`
155: `</application>`
这是微软对该<virtualDirectory>
元素的参考。打开此配置文件没有显示任何有用的信息。我尝试添加,password=""
但没有成功。
有什么方法可以实现我想要完成的目标吗?理想情况下,不需要在每个站点上添加模块或其他特殊代码。
答案1
我最终通过创建一个基于的精简自定义模块来解决我的问题自定义基本身份验证并将其添加到服务器级别(没有配置功能,因为在机器级别添加自定义配置非常繁重——您不能像在 web.config 文件中那样从程序集中引用配置部分)。这需要定位 .NET 2.0、对程序集进行强命名,并将其添加到 GAC。我修改了代码以仅执行身份验证,而不设置用户主体。