c# - ASP.NET Windows 身份验证拒绝来自 RDP 用户的访问
问题描述
我已经从 VS 模板 (MVC) 设置了一个 Web 应用程序,然后启用了 Windows 身份验证。
<authentication mode="Windows" />
<authorization>
<allow roles="ABC\Domain Users" />
<deny users="*" />
</authorization>
然后将 Web 应用程序发布到 IIS 服务器。
它工作正常,当从客户端机器请求应用程序的索引页面时,它会自动让我登录,并使用以下链接使用 IE 进行测试http://myteamserver.mycompany/myapplication
。
但是,如果我 RDP 到服务器(\\myteamserver.mycompany
托管 IIS 的地方),并在 IE 中打开相同的链接,它会不断提示输入凭据,即使在输入正确的凭据后,我也被拒绝访问。
错误信息:
HTTP 错误 401.2 - 未经授权 由于身份验证标头无效,您无权查看此页面。
问题:在客户端机器上运行 IE 和在服务器上运行 IE 有什么区别?
我检查服务器上的 IE 设置,选中“启用集成 Windows 身份验证”。我也将 RDP 连接到另一台服务器,从那里我可以毫无问题地访问 Web 应用程序。
解决方案
原来是 Windows 的一项安全功能:
当您浏览使用集成身份验证并托管在 IIS 5.1 或更高版本上的网站时,您会收到错误 401.1。
症状:
当您使用完全限定域名 (FQDN) 或自定义主机标头浏览运行 Microsoft Internet 信息服务 (IIS) 5.1 或更高版本的计算机上托管的本地网站时,您可能会收到一条错误消息类似于以下内容:HTTP 401.1 - 未经授权:登录失败
当网站使用集成身份验证并且具有映射到本地环回地址的名称时,会出现此问题。
注意如果您尝试直接在服务器上浏览网站,您只会收到此错误消息。如果您从客户端计算机浏览该网站,该网站将按预期工作。
原因:
.. 一种环回检查安全功能,旨在帮助防止对您的计算机进行反射攻击。因此,如果您使用的 FQDN 或自定义主机标头与本地计算机名称不匹配,则身份验证将失败。
如果我使用 localhost 或 IP 而不是 FQDN,它可以工作。
推荐阅读
- multilingual - Surveymonkey API V3 中受访者的“语言”在哪里
- ansible - 使用 Ansible 更新单个 vhost 文件
- javascript - 如何检查对象是否包含某个键?
- podio - 沙盒中的 Podio 是如何工作的?
- python-3.x - Python dtype 高级复合类型
- python-3.x - 使用 python 查找全球电话运营商
- java - 使用 Volley 预填充房间数据库
- exec - 在鱼壳中保持文件描述符打开
- c# - 从数据库中删除用户项
- python - 模拟一个类实例的函数调用,该类实例是 Python 中另一个类实例的成员