我有一个使用Windows身份验证和模拟的ASP.NET Web应用程序。这是web.config的相关部分:
<authentication mode="Windows"/>
<identity impersonate="true"/>
现在,应用程序代码尝试访问经过身份验证的用户有权访问的文件(XDocument.Load
)。这个工作得很好直到今天我们开始得到以下异常:
System.UnauthorizedAccessException: Access to the path '...' is denied.
(显然,管理员告诉我&#34;服务器上没有任何变化&#34;。)
我能够修复&#34;通过向文件授予应用程序池标识权限的问题。但是,我不明白为什么解决了这个问题。
我的问题:如果使用模拟,为什么应用程序池标识仍然需要访问所使用的文件?模拟用户和应用程序池标识都需要访问吗?或者只有应用程序池标识?如果是后者,那么冒充点是什么?
答案 0 :(得分:1)
网站使用w3wp.exe工作进程访问磁盘, 这本质上是应用程序池。为此设置的标识 在某些情况下使用应用程序池(例如IIS Apppool \ Site001) 磁盘。
使用Windows身份验证时,应用程序池标识(例如, IIS Apppool \ Site001)用于某些访问,但Windows帐户 (例如,User1)用于其他访问。这取决于模仿 您正在使用的应用程序或框架的设置。 因此,您通常需要授予对应用程序的访问权限 池标识,以及每个Windows帐户(例如User1,User2,User99) 需要访问您的网站。
这里有一些来自Scott Forsyth Article的引用。如果我理解你的话,这篇文章应该有所帮助。