具有Windows身份验证的IIS 7.5 Web应用程序是否要求最终用户具有文件权限?

时间:2013-01-02 10:50:26

标签: asp.net iis iis-7.5 windows-authentication

简短版本:

  

对于IIS 7.5使用Windows身份验证的Web应用程序结束   用户需要具有读取文件访问权限吗?

长版:

我有一个使用Windows身份验证的Intranet ASP.NET Web应用程序。它安装在许多不同的公司,通常认证工作正常:用户导航到网站,例如http://appserver/MyApp,该应用会识别他们登录的用户并相应地显示网页。我刚刚在新客户端安装它并遇到问题:

连接时到http://appserver/MyApp我提示输入Windows凭据,但在输入后我会反复提示。在几次重新输入凭据后,我显示了一个401错误页面,说明" 401 - 未经授权:由于凭据无效,访问被拒绝。"。因此,即使输入用户名和密码,它不仅不会通过我的身份。密码,它仍然拒绝访问。

给予阅读&对应用程序最终用户的执行权限可以解决此问题,但我认为这根本不是必需的。

在Windows应用程序事件日志中,有一条消息"请求的文件授权失败"以及线程帐户名称:NT AUTHORITY \ NETWORK SERVICE和用户: [正确的工作站用户的域帐户] 。这表明正在使用用户的身份执行文件访问,而不是使用网络服务的AppPool身份。如果我授予最终用户Read&执行权限(我没有尝试只读)到应用程序的目录然后一切正常:当用户浏览网站时,他们会自动进行身份验证,而不是提示,并且网站正确识别他们的身份!因此,我的解决方案是给予Read&在应用程序目录上对Everybody执行权限......但这不是一个理想的解决方案。

这似乎很奇怪。在IIS 7.5之前,我从来没有必要这样做,据我所知,在IIS 6或IIS 7中绝对不需要。这是一个新的IIS7.5吗?文档说默认情况下模拟已关闭。我在web.config中添加了一个元素以确保删除了除Network Service之外的文件权限,但问题仍然存在。

有什么想法? IIS 7.5上的Windows Authenticated站点是否正常,以便最终用户需要Web服务器文件的文件权限?

一些相关细节:

  • 网络服务 拥有对app文件夹的完全控制文件权限。
  • 从服务器本身连接时,系统提示我输入凭据 但进入它们后,我已经过身份验证,应用程序正常运行 正确包括显示我的Windows登录和连接和 从数据库中检索数据。我后来确定这是在提示 对于凭据,因为http://localhost位于受信任的站点中 因此不被认可为内联网区域,因此不被认可 传递身份。我也确定它的工作原理 此用户标识,因为它是具有文件的管理员用户 权限。
  • Web服务器正在运行Windows Server 2008 R2 / IIS 7.5。在我安装它之前,它没有安装IIS。我安装了默认功能以及Windows身份验证,ASP.NET和 可能还有其他一些项目。我安装了一个单独的WCF应用程序 使用IIS,匿名身份验证和.net 2.0正常运行 那个网络服务器。
  • 应用安装过程是文件的手动副本, 创建IIS App Pools&网络应用,更新连接字符串, 等。
  • 我检查了IE安全设置。它正在认识到 服务器在Intranet区域中,并具有选项'自动登录 仅限于Intranet区域'选择。同样在高级设置上 '启用集成Windows身份验证'选项已被检查。
  • 后 安装IIS我运行aspnet_regiis -i for .net 2.0和 {。1}为.net 4.0。
  • 匿名身份验证是 已禁用我的应用和Windows身份验证启用。
  • 该应用是 在ASP.NET v4上运行,但我安装了另一个应用程序 遇到运行ASP.NET v2的同样问题。
  • 该应用正在运行 使用Identity = Network Service和32位模式。
  • 数据库 连接字符串包括aspnet_regiis -iru和数据库 权限被授予Web服务器帐户Trusted Connection=True 例如[domain]\[server]$
  • 在IIS中>身份验证> Windows身份验证>提供商列表首先是谈判然后是NTLM。我尝试重新排序,所以NTLM是第一个。
  • 在Windows安全事件日志中 是一系列Microsoft Windows安全审核事件:登录 和注销。他们表示登录成功了 显示工作站用户的用户ID。这是从何时开始的 我从另一个工作站连接并收到401 多次尝试后未经授权。

我看到有人遇到此问题reported here但没有解决方法。最初我发布在ASPIIS论坛中,目前尚无答案。

更新: This msdn article

  

启用Windows身份验证但禁用模拟后,ASP.NET使用从浏览器发送的凭据模块执行文件访问检查 (我的重点) )。不需要启用模拟,因为FileAuthorizationModule模块确保允许请求用户对资源进行读访问或写访问,具体取决于执行请求之前的请求谓词(例如,GET或POST)。此行为适用于输入托管代码的任何请求。在早期版本的ASP.NET中,访问基于URI的文件,例如" Default.aspx"触发了访问检查。在ASP.NET MVC应用程序中,通常使用无扩展URL执行对资源的访问,此检查通常不适用,因为没有要检查的物理文件。在这种情况下,FileAuthorizationModule类将回退到检查文件夹的访问控制列表(ACL)。

这确实表明最终用户需要对文件(在.aspx的情况下)或文件夹(对于MVC)的权限......虽然这似乎有点隐藏和非确定性。关于App Pools的file authorization表示他们被用作保护资源的身份,这与需要向最终用户授予权限的想法相矛盾。除非App Pools和NETWORK SERVICE的规则不同,否则可能会出现这种情况,但会令人惊讶。

3 个答案:

答案 0 :(得分:8)

是否允许经过身份验证的用户访问应用文件夹?

enter image description here

答案 1 :(得分:6)

我们也在解决此问题,并开始设置安全组,以便我们可以为用户提供文件级权限。然后,我们的一位服务器管理员偶然发现了几个允许应用程序根据设置凭据对文件系统进行身份验证的新属性,并解决了用户访问的需要。这是他想出来的......

  

有两个IIS设置可以控制它:

     

物理路径凭据物理路径凭据登录类型

     

默认情况下,Physical Path Credentials设置为Application User   (传递身份验证)。这意味着IIS不会做任何事情   处理Windows身份验证请求时的模拟。这个可以,   但是,设置为特定用户(不幸的是,不是。)   应用程序池标识,这将是理想的)。物理路径   凭据登录类型默认设置为“明文”。对于我的测试   我将其设置为Interactive(尽管这可能不是正确的值)。   可能的值包括“明文”,“批处理”,“交互”和“网络”。

     

要进行此设置,我执行了以下操作:

     
      
  1. 创建了一个本地帐户(IIS-AccessUser)
  2.   
  3. 授予IIS-AccessUser读取和执行对站点的/ home目录的访问权。
  4.   
  5. 将IIS-AccessUser添加到IIS_IUSRS组(访问.NET临时文件所必需的)
  6.   
  7. 将IIS-AccessUser设置为物理路径凭据
  8.   
  9. 将物理路径凭据登录类型设置为交互式
  10.         

    执行上述操作后,我可以直接登录应用程序,   无需允许经过身份验证的用户,或者我必须是一个   / home文件夹中任何组的成员。它还是   保留了.NET授权角色,因此我仍然无法访问部件   我不被允许访问的网站。

答案 2 :(得分:3)

简短的回答是否定的。在IIS 7.0和IIS 7.5中使用Windows身份验证时,不需要授予文件访问权限。

我们之所以能够发现这一点,是因为我们的服务器管理员闻到了通过向用户和组授予文件级访问权限而产生的安全和管理问题。

对于处理此问题的任何人,或者如果您要设置新的IIS7 / IIS7.5服务器和/或从IIS 6移动,这篇文章提供了所有需要的Windows身份验证选项和配置修改以避免授予对个人或组的文件级访问权限。

请阅读POST结尾处的两条评论,以获得对本文所用方法的一些有效批评。

http://weblogs.asp.net/owscott/iis-using-windows-authentication-with-minimal-permissions-granted-to-disk

除了文章中的信息之外,请注意IIS 7.5没有使用system.web的Web配置标记(至少不在我的MVC 4应用程序中)。

它正在查看system.webserver标签以进行授权配置(您需要列出用户访问您的应用程序所需的Windows域\组)。

- DSB