Ror*_*ory 26 asp.net iis windows-authentication iis-7.5
精简版:
对于使用Windows身份验证的IIS 7.5 Web应用程序,最终用户是否需要具有读取文件访问权限?
长版:
我有一个使用Windows身份验证的Intranet ASP.NET Web应用程序.它安装在许多不同的公司,通常认证工作正常:用户导航到网站,例如http://appserver/MyApp,应用程序识别他们登录的人,并相应地显示页面.我刚刚在新客户端安装它并遇到问题:
连接时,例如http://appserver/MyApp我提示我输入Windows凭据,但输入后我会反复提示.在几次重新输入凭证后,我显示了一个401错误页面,上面写着"401 - 未经授权:由于凭证无效而拒绝访问".因此,它不仅没有通过我的身份,但即使输入用户名和密码,它仍然拒绝访问.
为应用程序的最终用户提供读取和执行权限可以解决此问题,但我认为这根本不是必需的.
在Windows应用程序事件日志中,有一条消息"请求的文件授权失败"以及线程帐户名称:NT AUTHORITY\NETWORK SERVICE和用户:[正确的工作站用户的域帐户].这表明文件访问是使用用户的身份执行的,而不是网络服务的AppPool身份.果然,如果我将最终用户的读取和执行权限(我没有尝试只读)授予应用程序的目录,那么一切正常:当用户浏览到站点时,他们会自动进行身份验证,而不是提示,以及网站正确认识他们的身份!因此,我的解决方案是在应用程序目录中为Everybody提供Read&Execute权限......但这不是一个理想的解决方案.
这看起来很奇怪.在IIS 7.5之前,我从来没有必要这样做,据我所知,在IIS 6或IIS 7中绝对不需要.这是一个新的IIS7.5吗?文档说默认情况下模拟已关闭.我在web.config中添加了一个元素,以确保删除了除Network Service之外的文件权限,但问题仍然存在.
有什么想法吗?IIS 7.5上的Windows Authenticated站点是否正常,以便最终用户需要Web服务器文件的文件权限?
一些相关细节:
http://localhost它位于受信任的站点,因此不被识别为Intranet区域,因此没有通过身份.我还确定它作为此用户标识工作,因为它是具有文件权限的管理员用户. aspnet_regiis -i.net 2.0和
aspnet_regiis -iru.net 4.0.Trusted Connection=True和数据库权限被授予Web服务器帐户,[domain]\[server]$
例如DGM\MyServer$. 我看到有人在这里报告了这个问题,但没有解决方案.最初我发布在ASP,然后IIS论坛到目前为止没有答案.
更新: 这篇msdn文章说
启用Windows身份验证但禁用模拟时,ASP.NET 使用从浏览器发送的凭据在文件授权模块中执行文件访问检查(我的重点).不需要启用模拟,因为FileAuthorizationModule模块确保允许请求用户对资源进行读访问或写访问,具体取决于执行请求之前的请求谓词(例如,GET或POST).此行为适用于输入托管代码的任何请求.在早期版本的ASP.NET中,基于URI(例如"Default.aspx")访问文件会触发访问检查.在ASP.NET MVC应用程序中,通常使用无扩展URL执行对资源的访问,此检查通常不适用,因为没有要检查的物理文件.在这种情况下,FileAuthorizationModule类将回退到检查文件夹的访问控制列表(ACL).
这确实表明最终用户需要对文件(在.aspx的情况下)或文件夹(对于MVC)的权限......虽然这似乎有点隐藏和非确定性.这篇关于App Pools的文章称,它们被用作保护资源的身份,这与需要向最终用户授予权限的想法相矛盾.除非App Pools和NETWORK SERVICE的规则不同,否则可能会出现这种情况,但会令人惊讶.
我们也在讨论这个问题,并开始设置安全组,以便我们可以为用户提供文件级权限.然后,我们的一位服务器管理员偶然发现了几个允许应用程序根据设置凭据对文件系统进行身份验证的新属性,并解决了用户访问的需要.这是他想出来的......
有两个IIS设置可以控制它:
物理路径凭据物理路径凭据登录类型
默认情况下,Physical Path Credentials设置为Application User(传递身份验证).这意味着IIS在处理Windows身份验证请求时不会进行任何模拟.但是,这可以设置为特定用户(不幸的是,不是应用程序池标识,这将是理想的).物理路径凭据登录类型默认设置为"清除文本".对于我的测试,我将其设置为Interactive(尽管这可能不是正确的值).可能的值包括"明文","批处理","交互"和"网络".
为此,我做了以下几点:
- 创建了一个本地帐户(IIS-AccessUser)
- 授予IIS-AccessUser读取和执行对站点的/ home目录的访问权限.
- 将IIS-AccessUser添加到IIS_IUSRS组(访问.NET临时文件所必需的)
- 将IIS-AccessUser设置为物理路径凭据
- 将物理路径凭据登录类型设置为交互式
执行上述操作后,我可以直接登录到应用程序,而无需允许Authenticated Users,或者我必须是/ home文件夹中任何组的成员.它还保留了.NET授权角色,因此我仍然无法访问我不允许访问的站点部分.
小智 3
最简洁的答案是不。在 IIS 7.0 和 IIS 7.5 中使用 Windows 身份验证时,不需要授予文件访问权限。
我们之所以能够发现这一点,是因为我们的服务器管理员嗅到了向用户和组授予文件级访问权限所带来的安全和管理问题。
对于处理此问题的任何人,或者如果您正在设置新的 IIS7/IIS7.5 服务器和/或从 IIS 6 迁移,这里有一篇文章为您提供了需要修改以避免的所有 Windows 身份验证选项和配置向个人或团体授予文件级访问权限。
请阅读帖子末尾的两条评论,了解对本文中使用的方法的一些有效批评。
除了本文中的信息之外,请注意 IIS 7.5 没有使用 system.web 的 Web 配置标记(至少在我的 MVC 4 应用程序中没有)。
它在 system.webserver 标签中查找授权配置(您需要在其中列出用户访问您的应用程序所需的 Windows 域\组)。
——DSB
| 归档时间: |
|
| 查看次数: |
30687 次 |
| 最近记录: |