Web Api托管在IIS - 401未经授权的错误

时间:2014-03-13 22:09:20

标签: authentication windows-authentication asp.net-web-api

我为内部网环境编写了Web Api。与其他应用程序一样,Web Api配置为Windows身份验证。但返回的错误是:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Date: Thu, 13 Mar 2014 22:05:12 GMT
Content-Length: 6171
Proxy-Support: Session-Based-Authentication

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这就是小提琴手:

  

未选择身份验证协议(包括匿名)   IIS.Only集成身份验证已启用,并且是客户端浏览器   用于不支持集成身份验证。集成   身份验证已启用,请求已通过代理发送   它在到达Web之前更改了身份验证标头   server.Web服务器未配置匿名访问和a   未收到所需的授权标题   "配置/ system.webServer /授权"配置部分   可能明确拒绝用户访问。

答案 1 :(得分:0)

我怀疑使用该服务的应用程序可以托管在同一台服务器上,并通过完全限定的域名进行引用。在这种情况下,问题可能是由环回检查引起的。要进行测试,请尝试引用该服务,而不使用完全限定的域名,看看它是否有效。如果是,请使用以下步骤指定本地计算机上的主机名。

方法1:指定主机名(如果需要NTLM身份验证,则为首选方法)http://support.microsoft.com/kb/896861

要指定映射到环回地址并可以连接到计算机上的网站的主机名,请按照下列步骤操作:

  1. 将DisableStrictNameChecking注册表项设置为1.有关如何执行此操作的详细信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:281308在基于Windows 2000的计算机或Windows上连接到SMB共享基于Server 2003的计算机可能无法使用别名
  2. 单击“开始”,单击“运行”,键入regedit,然后单击“确定”。
  3. 在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ LSA \ MSV1_0
  4. 右键单击“MSV1_0”,指向“新建”,然后单击“多字符串值”。
  5. 键入BackConnectionHostNames,然后按ENTER键。
  6. 右键单击“BackConnectionHostNames”,然后单击“修改”。
  7. 在“数值数据”框中,键入本地计算机上的站点的主机名或主机名,然后单击“确定”。
  8. 退出注册表编辑器,然后重新启动IISAdmin服务。
  9. http://blogs.4ward.it/impersonation-issues-401-error-mvc-and-web-api-4-5/

    类似的问题 - 401 Unauthorized error web api mvc windows authentication