【发布时间】:2014-06-05 11:42:55
【问题描述】:
这与我以前见过的许多问题相似,但我还没有找到明确的答案,所以我会尽量在这里非常具体以避免重复。
我们在 2008R2 上运行 IIS7.5,仅 Windows 身份验证已打开(无匿名)且无模拟。为应用程序池用户指定了一个网络帐户。
当我检查当前执行页面的 WindowsIdentity.GetCurrent() 时,我会根据我们的配置获得预期的(应用程序池)用户。
http://www.mikeobrien.net/blog/identities-for-different-iis7/
这很好地符合预期。但是,我们的应用程序上的 NTFS 文件夹权限似乎正在根据经过身份验证的用户的身份进行检查。
这似乎与我找到的大多数文档相矛盾。上面的链接以及
http://msdn.microsoft.com/en-us/library/kwzs111e(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/3yfs7yc7(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/gg703322%28v=vs.98%29.aspx
当 .Net 清楚地表明正在使用的 WindowsIdentity 是 App-Pool 的身份时,IIS 如何检查文件夹 ACL 中经过身份验证的用户的身份?
到目前为止,我唯一的理论是文件授权模块自动与集成身份验证一起使用,并且它正在明确检查这一点......但它似乎仍然违背了记录的期望。
http://msdn.microsoft.com/en-us/library/gg703322%28v=vs.98%29.aspx
例如,这篇文章似乎记录了两者的期望。
当启用 Windows 身份验证但禁用模拟时,ASP.NET 使用从浏览器发送的凭据在文件授权模块中执行文件访问检查。不需要启用模拟,因为 FileAuthorizationModule 模块确保请求用户被允许对资源进行读取访问或写入访问,具体取决于执行请求之前的请求动词(例如,GET 或 POST)。
几行之后
没有模拟的 Windows 身份验证。这是默认设置。 ASP.NET 使用应用程序的进程标识执行操作和访问资源,默认情况下,该标识是 Windows 7 和 Windows 2008 R2 上的应用程序池标识。有关详细信息,请参阅应用程序池标识。
带有模拟的 Windows 身份验证。通过这种方法,Web 应用程序模拟经过身份验证的用户并使用该身份执行操作和访问本地资源。当您为模拟配置应用程序时,经过身份验证的用户的模拟令牌将附加到 Web 请求线程。因此,所有本地资源访问都是使用调用者的身份执行的。
我的问题:
执行文件系统 ACL 检查时应该使用什么身份? (我的理解是 App-Pool when impersonation = off)以及哪些设置可能会影响在模拟之外使用哪个身份?
这与这个问题非常相似:
Does an IIS 7.5 web app with windows authentication require end users to have file permissions?
关于这个问题的标记答案没有解决我的问题。不应要求授权“经过身份验证的用户”组,因为所使用的身份不应依赖于被授权的最终用户集。我的问题更具体,哪个身份以及如何控制?
【问题讨论】:
-
Environment.UserName 给你什么用户?这应该为您提供 asp.net 线程正在访问文件的人可能会将您发送到另一条路径?这个问题听起来真的很熟悉,但我只能指手画脚。
-
标签: asp.net .net security iis iis-7.5