了解模拟权限

Hei*_*nzi 5 c# asp.net iis impersonation

我有一个使用Windows身份验证和模拟的ASP.NET Web应用程序.这是web.config的相关部分:

<authentication mode="Windows"/>
<identity impersonate="true"/>
Run Code Online (Sandbox Code Playgroud)

应用程序代码现在尝试访问经过身份验证的用户有权访问的文件(XDocument.Load).这完全正常,直到今天我们开始得到以下异常:

System.UnauthorizedAccessException: Access to the path '...' is denied.
Run Code Online (Sandbox Code Playgroud)

(显然,管理员告诉我"服务器上没有任何变化".)

我能够通过向文件授予应用程序池标识权限来"修复"该问题.但是,我不明白为什么这样就解决了这个问题.

我的问题:如果使用模拟,为什么应用程序池标识仍然需要访问所使用的文件?模拟用户和应用程序池标识都需要访问吗?或者只有应用程序池标识?如果是后者,冒充的重点是什么?

myb*_*ame 1

\n

该网站通过使用 w3wp.exe 工作进程来访问磁盘,\n 这本质上是应用程序池。在某些情况下,该应用程序池的标识集(例如 IIS Apppool\\Site001)会在磁盘上使用。

\n\n

使用 Windows 身份验证时,应用程序池标识(例如\n IIS Apppool\\Site001)用于某些访问,而 Windows 帐户\n(例如 User1)用于其他访问。这取决于您所使用的应用程序或框架的模拟设置。因此,您通常需要授予对应用程序池身份以及每个 Windows 帐户(例如 User1、 User2、User99)\n 需要访问您的站点。

\n
\n\n

这里引用了Scott Forsyth 文章中的一些内容。如果我理解正确的话这篇文章应该会有所帮助。

\n