401未经授权:由于凭据无效而拒绝访问


73

我正在使用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对请求的响应为error 401

有什么线索吗?

Answers:


209

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

使用“应用程序池标识”似乎一切设置正确,但是我继续收到该错误。经过大量挖掘之后,匿名用户可以使用应用程序池标识或特定用户的凭据进行设置。无论出于何种原因,我的默认用户均为特定用户。将设置更改为“应用程序池标识”对我来说解决了这个问题。

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

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


6
还允许“ .net授权规则”
每G

4
以防万一,这不是给您的,但令我困扰的是我删除了iisstart,并创建了default.htm,但实际上default.htm是default.htm.txt,因为Microsoft喜欢说谎服务器隐藏了文件扩展名。感谢微软如此la脚。
沃伦·P

6
就像保存我的培根的许多答案一样,我希望我可以多次投票
自由落体者

3
启用Windows身份验证时会发生什么情况
2016年

1
另外,如果请求的资源不在站点的根目录中,请检查该资源的目录路径中是否有其他web.config。如果存在,它可能具有一个拒绝匿名访问的授权元素。
安东尼

31

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

  1. 选择您的站点。
  2. 点击错误页面。
  3. 编辑功能设置。
  4. 选择详细的错误。

完善。:)谢谢
Gopichandar 2014年

我只在表单auth中使用登录页面的匿名访问权限。虽然机器本身一切正常,但我从远程机器上获得了401。“选择详细信息错误”解决了该问题。我不知道这是如何使auth问题消失的,但是它确实有效。
卡尔”

我在部署MVC应用程序时遇到此问题。在开发环境中,错误的特殊页面(404、401等)可以正常工作。但是在生产环境中……直到我改变了Uwe和Suraj所说的。谢谢。
罗洛

自从此问题解决以来,我给了+1,但我希望我知道为什么这可以解决问题。无论如何,谢谢。
Doug F


11

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

对于可能对此有所帮助的人,这挽救了我的生命...

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

  1. 打开IIS,然后选择导致401的网站
  2. 打开“ IIS”标题下的“身份验证”属性
  3. 单击“ Windows身份验证”项,然后单击“提供程序”
  4. 对我而言,问题在于谈判高于NTLM。我认为幕后正在发生某种握手,但我从未真正通过过身份验证。我将NTLM移到了最高位置,然后由BAM进行了修复。

这是找到此链接


7

我意识到这是一个古老的问题,但这是我搜索到的。最近刚构建并首次部署的MVC应用程序也遇到了类似的问题,并且身份验证机制并未完全被淘汰。

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

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

希望这对某人有帮助。


2

我遇到了类似的问题。

该文件夹已共享,并提供了“身份验证的用户”权限,从而解决了我的问题。


2

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

将以下内容添加到Web.config中可以解决此问题

 <system.web>
  <authentication mode="Forms" />
 </system.web>

2

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

<system.web>
    <authentication mode="None"/>
</system.web>

2

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

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

这对我有用。



1

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

  1. 打开IIS
  2. 选择网站
  3. 开放式认证
  4. 编辑匿名身份验证
  5. 选择应用程序池标识

0

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


0

就我而言,使它起作用的原因是 匿名用户身份从特定用户(IUSR)更改为应用程序池身份的原因是什么。足够奇怪,因为其他站点正在使用特定的用户IUSR,并且可以正常工作。


-1

以我为例,
开发了我的应用程序,MVC并装饰了我的家庭控制器类,[Authorize]从而导致了此问题。
所以我删除了它,因为我的应用程序不需要任何身份验证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.