401 Unauthorized:由于凭据无效,访问被拒绝

时间:2012-11-07 22:45:54

标签: asp.net-mvc iis http-status-code-401 form-authentication

我正在使用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响应请求。

有任何线索吗?

15 个答案:

答案 0 :(得分:152)

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

似乎使用应用程序池标识正确设置了所有内容,但我仍然收到错误。经过大量挖掘后,匿名用户可以使用应用程序池标识或特定用户的凭据进行设置。无论出于何种原因,我的默认用户都是默认用户。将设置更改为App Pool Identity可以解决我的问题。

  1. IIS管理器→站点→网站
  2. 双击“身份验证”
  3. 选择匿名身份验证
  4. 从“动作”面板中,选择“编辑”
  5. 选择应用程序池标识,然后单击确定
  6. 希望这能节省一些时间!

答案 1 :(得分:26)

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

  1. 选择您的网站。
  2. 点击错误页面。
  3. 修改要素设置。
  4. 选择详细错误。
  5. 享受。

答案 2 :(得分:11)

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

enter image description here

答案 3 :(得分:10)

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

无论这对谁有所帮助,这都挽救了我的生命......

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

  1. 打开IIS并选择导致401
  2. 的网站
  3. 打开“IIS”标题下的“身份验证”属性
  4. 单击“Windows身份验证”项,然后单击“提供者”
  5. 对我来说,问题是谈判高于NTLM。我假设在幕后发生了某种握手,但我从未真正认证过。我把NTLM移到了最顶端的位置,并修复了它的BAM。
  6. Here is the link where this was found

答案 4 :(得分:7)

我意识到这是一个古老的问题,但这在我的搜索中出现了。最近一次部署的MVC应用程序出现了类似的问题,并且身份验证机制还没有完全消除。

在我的情况下,它不是一个IIS设置,它是一个没有[AllowAnonymous]装饰的控制器。我在Layout.cshtml中使用了Render.Action / Html.Action,用户未经身份验证。因此,布局尝试在UnAuthenticated上下文中加载经过身份验证的操作。

将操作更新为AllowAnonymous后,问题就消失了,this is what led me to it

希望这有助于某人。

答案 5 :(得分:2)

我遇到了类似的问题。

该文件夹已共享,并提供了Authenticated Users权限,这解决了我的问题。

答案 6 :(得分:2)

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

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

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

答案 7 :(得分:2)

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

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

答案 8 :(得分:1)

我对网站有权限问题,只是无法使Windows身份验证正常工作。最终是folder permissions rather than ASP.NET configuration issue,一旦Everyone用户被授予权限,它便开始工作。

答案 9 :(得分:0)

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

 <httpErrors existingResponse="PassThrough" />

这适合我。

答案 10 :(得分:0)

在我的情况下,
我的应用程序是在MVC中开发的,我的家庭控制器类用[Authorize]修饰,导致了这个问题。
所以我删除了它,因为我的应用程序不需要任何身份验证。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

在我的情况下,使它可行的原因是将匿名用户身份从特定用户(IUSR)更改为应用程序池身份。这很奇怪,因为其他站点正在使用特定用户IUSR并且可以正常工作。

答案 13 :(得分:0)

我在IIS 10上遇到了这个问题。这就是我解决的方法。

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

答案 14 :(得分:0)

正如许多答案所表明的那样,错误可能是由多种原因引起的。在我的例子中,它与授权规则有关:它们是在应用程序部署后很晚才添加的。 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 中,您可以转到应匿名访问的特定文件夹/文件并选择授权规则:

enter image description here

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

enter image description here