我有一个在Windows 2003服务器上的IIS 7下运行的.NET 3.5应用程序,并且在我继续提示登录时无法使集成的Windows身份验证正常工作.我已将IIS身份验证设置为在IIS中启用,并禁用所有其他安全类型,并且我的应用程序web.config文件身份验证/授权设置为:
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
<authenticationmode="Windows"/>
<authorization>
<deny users = "?" />
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
通过这种设置,我期待Windows用户的场景验证背后允许访问和拒绝匿名用户.但是,当我尝试访问该站点时,我得到的是Windows登录弹出窗口.
我已经解决了这个问题几天了,无法解决问题.基于具有类似问题的帖子,我确认我的URL不包含任何句点,仔细检查我的IE设置是否设置为启用集成Windows身份验证,还将我的URL添加到我的Intranet站点,但仍然获得弹出窗口.
为了进一步排除故障,我在IIS中启用了匿名身份验证并修改了我的web.config文件,然后添加了Response.Write(System.Security.Principal.WindowsIdentifity.getcurrent().user.name.toString() )尝试查看身份验证中使用的用户.我得到的结果是IIS APPPOOL\myapp,它显然是我的应用程序的IIS应用程序池.
我真的很感激任何人都可以提供的任何帮助,所以我仍然只使用Windows身份验证,但没有获得弹出窗口,并且Windows身份验证是针对实际的Windows用户执行的.
谢谢.
进一步排除故障后的其他说
只是注意到当登录失败并再次显示Windows登录提示时,它显示尝试登录为"SERVERNAME"\"USERNAME"的用户名,这使我相信它正在尝试验证用户对服务器的对比域.为了确认这一点,我直接在应用服务器上创建了一个本地用户帐户,其用户名和密码与网络域用户相同,并尝试再次登录.结果是我再次收到登录提示,但是当我输入用户名和密码时,我能够成功登录.网络用户和应用服务器位于同一个域中,因此实际上不确定为什么IIS身份验证指向本地应用服务器帐户而不是域帐户.我知道这是一个IIS问题,所以发布在forums.iis.net上,但感谢任何人可能有任何建议,因为已经解决了这几天.
精简版:
对于使用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$. 我看到有人在这里报告了这个问题 …
我长期以来一直在寻找解决这个头痛问题的方法。
我有一个网站想要部署到我的 Web 服务器,因此我使用 IIS 7 并按照以下步骤对登录进行身份验证:
1-打开IIS
2-添加网站(带有随机端口号)
3-将其应用程序池设置为特定的身份
4- 禁用匿名身份验证,然后启用 Windows 身份验证。
5-删除“允许所有用户”规则
6-为管理员用户添加允许规则并给予他完全控制访问权限
当我尝试访问它时,它要求输入用户名和密码,该用户名和密码必须与步骤 6 中添加的用户相同。
问题是每当我单击“确定”时,日志记录窗口都会不断弹出,因此无法访问网站
我还尝试为匿名用户添加拒绝规则
web.config 文件中必须添加什么内容吗?我需要安装某些东西或禁用某些东西吗?
任何建议都非常感激
编辑 这是我的 web.config 文件授权部分
<system.web>
<authentication mode="Windows" />
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<pages validateRequest="false"></pages>
<identity impersonate="false" />
<authorization>
<allow users="SomeUser" />
<deny users="*"/>
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)