这是我之前见过的许多类似的问题,但我还没有找到一个明确的答案,所以我会在这里尝试非常具体,以避免重复。
我们在2008R2上运行IIS7.5,启用了仅 Windows身份验证(无匿名)且没有模拟。为应用程序池用户指定了一个网络帐户。
当我检查当前正在执行的页面的WindowsIdentity.GetCurrent()时,我会根据我们的配置获得预期的(App-pool)用户。
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)以及哪些设置可能影响在模仿之外使用哪个身份?
这与这个问题非常相似:
Does an IIS 7.5 web app with windows authentication require end users to have file permissions?
这个问题的明确答案并未解决我的担忧。不应要求授权“经过身份验证的用户”组,因为所使用的身份不应依赖于被授权的最终用户集。我的问题更具体,哪个身份以及如何控制?
答案 0 :(得分:1)
“IIS 7.5中的新内容”
IIS 7.5将authenticatedUserOverride属性添加到元素,该元素配置IIS 7服务器运行时是否将在IHttpUser :: GetPrimaryToken和IHttpUser :: GetImpersonationToken方法中提供经过身份验证的用户的身份或工作进程标识。此属性可以设置为UseAuthenticatedUser或UseWorkerProcessUser,这些值分别指定IIS 7服务器运行时是否将为使用模拟的任何模块提供经过身份验证的用户的标识或工作进程标识。“