88

我正在使用 IIS Express 部署 MVC4 应用程序。该网站在同一台计算机上完美运行。但在 Lan 它给了我错误 401。

<authentication mode="Forms">
    <forms loginUrl="~/" slidingExpiration="true" timeout="20">
    </forms>
</authentication>

在家庭控制器

[HttpPost]
[AllowAnonymous]        
public ActionResult Index(LoginModel model, string returnUrl)
{
}

我在管理员模式下从命令提示符启动 IIS 服务器。IIS 以错误响应请求401

有什么线索吗?

4

17 回答 17

249

我意识到这是一篇较旧的帖子,但我在 IIS 8.5 上遇到了同样的错误。希望这可以帮助另一个遇到相同问题的人(我没有在其他类似标题的问题中看到我的问题)。

应用程序池标识似乎已正确设置一切,但我继续收到错误消息。经过大量挖掘,匿名用户可以使用应用程序池身份或特定用户的凭据进行设置。无论出于何种原因,我的默认用户都是特定用户。将设置更改为 App Pool Identity 为我解决了这个问题。

  1. IIS 管理器 → 站点 → 网站
  2. 双击“身份验证”
  3. 选择匿名身份验证
  4. 从“操作”面板中,选择“编辑”
  5. 选择应用程序池标识并单击确定

希望这可以节省其他人一些时间!

于 2015-03-03T16:31:14.423 回答
31

如果您使用的是 IIS 7,请执行以下操作:

  1. 选择您的网站。
  2. 单击错误页面。
  3. 编辑功能设置。
  4. 选择详细错误。
于 2012-12-05T06:10:26.770 回答
13

确保您在 iis 上启用了匿名身份验证,如下所示:

在此处输入图像描述

于 2012-11-08T07:19:52.330 回答
11

如果有人仍在寻找这个,这为我们解决了问题:

不管这对谁有帮助,这救了我的命……

IIS 7 很难弄清楚为什么我得到 401 - 未经授权:由于凭据无效,访问被拒绝......直到我这样做......

  1. 打开 IIS 并选择导致 401 的网站
  2. 打开“IIS”标题下的“Authentication”属性
  3. 单击“Windows Authentication”项,然后单击“Providers”
  4. 对我来说,问题是协商高于 NTLM。我假设在幕后进行了某种握手,但我从未真正通过身份验证。我把 NTLM 移到了最上面的位置,然后 BAM 修复了它。

这是找到它的链接

于 2014-04-23T21:05:12.780 回答
8

我意识到这是一个老问题,但这在我的搜索中出现了。对于最近构建、首次部署的 MVC 应用程序有类似的问题,并且身份验证机制没有完全散列。

就我而言,这不是 IIS 设置,而是未[AllowAnonymous]装饰的控制器。我在 Layout.cshtml 中使用了 Render.Action/Html.Action 并且用户未经身份验证。因此,布局尝试在未经身份验证的上下文中加载经过身份验证的操作。

一旦我将操作更新为 AllowAnonymous,问题就消失了,这就是导致我的原因

希望这可以帮助某人。

于 2014-08-05T16:14:41.870 回答
6

我在 IIS 10 上遇到了这个问题。这就是我修复它的方法。

  1. 打开 IIS
  2. 选择站点
  3. 开放认证
  4. 编辑匿名身份验证
  5. 选择应用程序池标识
于 2020-12-16T18:49:41.223 回答
2

我今天有一个类似的问题。出于某种原因,我的GET请求很好,但是我的WCF WebHttp 服务的PUT请求失败

将以下内容添加到 Web.config 解决了该问题

 <system.web>
  <authentication mode="Forms" />
 </system.web>
于 2017-06-13T20:21:52.953 回答
2

当我使用 MVC 文件夹创建一个空项目然后将应用程序部署到服务器时,我遇到了这个错误。我的问题是我没有在 中定义身份验证Web.config,所以我所要做的就是将此行添加到system.web标签中。

<system.web>
    <authentication mode="None"/>
</system.web>
于 2017-07-31T14:32:12.600 回答
2

我在 IIS 8.5 下遇到了同样的问题。对我来说,一个可行的解决方案是更改 IIS 以显示详细的错误。请参阅 sna2stha 的回答。但我认为将详细的错误消息转发到生产环境中的浏览器并不是一个好主意。我在 httpErrors-Section 中添加/更改了 existingResponse 属性,因此 IIS 没有处理任何现有的 Asp.net 响应:

<system.webServer>
   <httpErrors existingResponse="PassThrough" />
</system.webServer>

这对我有用。

于 2016-11-17T08:33:50.397 回答
2

我遇到了类似的问题。

该文件夹已共享并提供了经过身份验证的用户权限,这解决了我的问题。

于 2015-08-31T09:31:58.960 回答
1

在我的例子中,使它起作用的是将匿名用户身份从特定用户 (IUSR) 更改为应用程序池身份。很奇怪,因为其他网站正在使用特定用户 IUSR 并且工作正常。

于 2020-06-27T20:13:36.483 回答
1

正如许多答案所表明的那样,错误可能是由多种原因引起的。在我的例子中,它与授权规则相关联:它们是在应用程序部署后很久才添加的。IIS 的此功能作为 Windows 组件打开(万维网服务->安全性->URL 授权)。

web.config 中的这个特定部分是罪魁祸首:

<system.webServer>
  <security>
    <authorization>
      <remove users="*" roles="" verbs="" />
      <add accessType="Deny" users="?" />
      <add accessType="Deny" users="user1,user2" />
      <add accessType="Allow" users="*" />
    </authorization>
  </security>
</system.webServer>

因此,users="?"由于默认情况下继承了规则,因此也阻止了对具有匿名身份验证的路径的访问记录。但是,在 IIS 中,您可以转到应匿名访问的特定文件夹/文件,然后选择授权规则:

在此处输入图像描述

在这里,可以通过删除旧规则并可选地添加允许的规则来在本地覆盖规则以使其更明确:

在此处输入图像描述

于 2021-04-02T13:55:58.750 回答
1

右键单击项目文件所在的主目录。

属性-> 安全-> 编辑-> 添加-> 键入IIS_IUSRS并单击“检查名称”按钮。

结果看起来像ComputerUsername\IIS_IUSRS

例如:桌面-M0R6PVF\IIS_IUSRS

然后点击“确定”按钮。

在此处输入图像描述

于 2022-01-12T14:09:28.403 回答
0

我有一个网站的权限问题,只是无法让 Windows 身份验证工作。这最终是一个文件夹权限而不是 ASP.NET 配置问题,一旦Everyone用户被授予权限,它就开始工作。

于 2020-01-14T10:10:18.363 回答
0

我有一个稍微不同的问题。凭证问题是针对运行应用程序的底层用户,而不是尝试登录的用户。对此进行测试的一种方法是转到 IIS 管理 -> 站点 -> 您的站点 -> 基本设置 -> 测试设置。

于 2020-02-28T00:11:38.843 回答
0

您可以在 Web 项目上按 F4 以获取“项目属性”窗口。

然后确保在“开发服务器”部分中启用了匿名身份验证:

在此处输入图像描述

于 2021-11-15T18:07:49.423 回答
-1

就我而言,
我的应用程序是在其中开发的,MVC并且我的家庭控制器类被装饰了,[Authorize]这导致了这个问题。
所以我删除了它,因为我的应用程序不需要任何身份验证。

于 2018-01-31T14:02:32.057 回答