【问题标题】:IIS 7.5 Integrated Authentication NTFS Folder Permissions without ImpersonationIIS 7.5 集成身份验证 NTFS 文件夹权限,无需模拟
【发布时间】: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


【解决方案1】:

“IIS 7.5 中的新功能

IIS 7.5 向元素添加了 authenticatedUserOverride 属性,该属性配置 IIS 7 服务器运行时是否将在 IHttpUser::GetPrimaryToken 和 IHttpUser::GetImpersonationToken 方法中提供经过身份验证的用户身份或工作进程身份。此属性可以设置为 UseAuthenticatedUser 或 UseWorkerProcessUser,这些值分别指定 IIS 7 服务器运行时是否将为任何使用模拟的模块提供经过身份验证的用户身份或工作进程身份。"

Source

【讨论】:

  • 我对设置很熟悉。我遇到的主要问题是我们没有指定任何模块使用模拟。我正在盘旋的是,Windows 身份验证似乎强制使用 FileAuthorizationModule,它显式地模拟经过身份验证的用户,而不管全局模拟设置如何。这真的是默认行为吗?
  • 根据this 文章作者的说法,即使没有模拟,仍然需要将 authenticatedUserOverride 设置为 UseWorkerProcessUser
  • 指出此文档http://msdn.microsoft.com/en-us/library/gg703322%28v=vs.98%29.aspx 是为 IIS 7 生成的,这也可能会有所帮助。而且,是的,从我能够找到的内容来看,似乎在 IIS 7.5 除非设置了 UseWorkerProcessUser,否则默认使用 FileAuthorizationModule
  • 这可能也很有趣:http://technet.microsoft.com/en-us/library/dd163543.aspx。特别是 基于 NTFS ACL 的授权部分。
  • "IIS 7.0 服务器引擎(而不是模块)自动执行基于 NTFS ACL 的授权。在此授权期间,Web 服务器会检查经过身份验证的用户身份是否有权访问物理文件或正在请求的文件夹。注意基于 NTFS ACL 的授权是 IIS Web 服务器核心的一部分,因此始终在安装 Web 服务器时安装。虽然无法卸载或禁用它,但您可以删除以下列表中的要求之一以将您的应用程序配置为不使用它。”
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多