问题 使用IIS,MVC“拒绝访问”


超越“访问被拒绝”消息时遇到严重问题:

错误消息401.2:未授权:由于服务器配置而导致登录失败。验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面。请与Web服务器的管理员联系以获取其他帮助。

我是怎么来到这里的

在Windows 7,Professional下运行。使用AD登录系统的系统(名称:SYSTEM \ login)。在VS2010中创建了一个名为XYZ的新MVC 3应用程序。没有对代码进行任何更改。将System.Web.mvc和System.Web.Helpers的引用文件设置为Copy to Local = true。

我尝试了什么

  1. 发布XYZ到文件系统位置“C:/ websites / XYZ”。
  2. 将“abc.xyz.com”添加到IPA 127.0.0.1的hosts文件中。
  3. 在IIS管理器中创建名为“XYZ”的新站点,并将物理路径设置为发布应用程序的路径(C:/ websites / XYZ)。
  4. 将XYZ绑定到abc.xyz.com:80。
  5. 确保站点运行的应用程序池.NET 4.0,集成。
  6. 应用程序池标识设置为ApplicationPoolIdentity。
  7. 在已发布文件的物理位置,右键单击文件夹,然后转到属性 - >安全性,并将IUSR添加到用户列表,使其完全控制。
  8. MVC项目的身份验证模式设置为“无”。
  9. 站点身份验证启用了匿名访问,并禁用了所有其他功能。
  10. 我还为该站点启用了目录浏览。

毕竟,我重置了网站,刷新浏览器,并重置IIS。当我去abc.xyz.com时,我仍然收到此消息。我完全不知道接下来应该检查什么。

我需要的

谁能帮我这个?我已经使用“mvc localhost access denied”等组合执行了几次Google搜索,我实施了我发现的建议。


2795
2017-07-31 17:14


起源

忘了提到通过F5执行应用程序工作得很好。 - James Jensen


答案:


固定

好。找到答案......至少对这个应用程序。我将身份验证从Windows更改为匿名。然后,我删除了拒绝匿名访问的.NET授权规则。这两件事使得能够访问应用程序而无需Windows授权附带的恼人的IIS登录弹出窗口。

我之前没有注意到的一件事是我对网站所做的更改反映在网站的web.config文件中 发表 位置,而不是来源。

不幸的是,每次我发布时都会重置身份验证。这可能是我遇到这么多麻烦的真正原因。学过的知识。懊恼,我。

另一件我未能澄清的事情是我使用的是IIS 7.5。


10
2017-08-01 15:43



陷入类似的问题。拉着我的头发试图修理它。这篇文章让我走上了正确的道路。确保你的web.config中没有这个:<authorization> <deny users =“?” /> </ authorization> - Koen Zomers
巨大!谢谢Koen - killerbarney
将MVC站点从IISExpress移动到IIS,它给了我这个错误。在IIS中,它不会显示身份验证设置为Windows,并且web.config拒绝未经身份验证的用户。奇怪但是,在IIS中重新应用适当的身份验证设置后,它才有效。 - hacker


在web.config文件中添加它。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>

希望这会有所帮助。 :)


1
2017-09-02 19:10



这是建议还是经过验证的解决方案?在回答问题时,最好给出一个来自实际经验的答案。在阅读了这个配置选项的文档后,它在我看来,它与问题中的问题无关。 - pasty
-1为什么要加上这个 - Wadester


如果你想避免复制错误文件之类的事情:

  • 在这种情况下使用发布配置文件和转换:

我的开发箱:

<authentication mode="None" xdt:Transform="Replace"/>
  <authorization xdt:Transform="Replace">
  </authorization>

生产:

<authentication mode="Windows" xdt:Transform="Replace"/>
<authorization xdt:Transform="Replace">
  <deny users="?" />

1
2017-12-03 13:54



user5635311:感谢您的回复。不幸的是,因为我提出这个问题已经有两年多了,所以我已经转到了VS 2013.当我获得一些空闲时间(LOL)时,我可以在该版本上测试这个实验,但是当前的应用程序运行得很好。 - James Jensen


创建MVC应用程序时,一个选项是创建“Intranet”应用程序。这将默认打开“Windows”身份验证 Web.config

将此类项目发布到IIS时,需要在IIS管理控制台中为应用程序启用Windows身份验证。您可能还必须禁用匿名身份验证。


0
2017-07-31 17:27



跟进这个。完全删除了应用程序,但保留了该网站。在同一位置创建了一个具有相同名称的新应用。确保它是一个“内部网”应用程序。同样的问题。我以为我最初选择了“Intranet”解决方案,但我必须确定。 - James Jensen
您是否在IIS管理控制台中启用了Windows身份验证? - Matt Houser
是的,它提出了IIS登录窗口,我不想要,因为规范要求授权以不同的方式发生。我们有一个自定义授权包含框架,需要在任何其他授权方案之外运行。 - James Jensen
正如你在答案中提到的,这是问题的根源。你的web.config说要使用Windows身份验证,但是你压制了网站使用它的能力。 - Matt Houser


我得到错误,因为这行由web.config

https://www.asp.net/visual-studio/overview/2013/using-browser-link

<appsettings>
    <add key="vs:EnableBrowserLink" value="false"></add>
</appsettings>
<system.web>
  <compilation debug="false" targetFramework="4.5" />
</system.web>

0
2017-12-28 09:36