401未经授权的错误web api mvc windows身份验证

时间:2013-08-07 15:08:12

标签: c# iis-7 asp.net-web-api http-status-code-401

我收到401未经授权的错误。我的网络服务是用mvc编写的。在IIS中配置为使用Windows身份验证。 下面是小提琴手的截屏 enter image description here

当我从浏览器点击URL时,它会弹出窗口输入用户名和密码。 如何避免弹出窗口?

我从另一个窗口服务调用此web api。

5 个答案:

答案 0 :(得分:4)

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

方法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/

    **编辑以答案的形式,并包含参考链接的详细步骤

答案 1 :(得分:3)

如果您使用的是WebClient,则需要设置凭据。你是如何通过Windows服务调用web api的?

答案 2 :(得分:1)

您可以在网址中指定用户名和密码:

http://username:password@www.example.com/foo/bar/baz

注意:仅仅因为你可以并不意味着应该。虽然这可以作为测试事物的临时解决方案,但我不建议在生产中这样做。在过去,这就是我们这样做的方式。但正如@DiskJunky所指出的那样,“几乎任何人/任何人都可以看到URL”,其中包括您的浏览器历史记录,服务器日志,甚至可能更糟糕。

答案 3 :(得分:1)

我的2美分:我遇到了在部署Web应用程序时请求图像时遇到HTTP 401困惑的情况。我们使用WiX作为我们的包装和安装解决方案。 在这种特定情况下,安装程序未对映像进行打包,因此部署的实例上的路径也不存在。

有人可能想知道为什么在强烈要求 404 (未找到)时会抛出 401 - 我的理解是因为我们的路径不是直接位于根目录下但是像root / content / images / image.png这样的东西,我发了一个匿名请求,我得到了401(未经授权),因为我没有浏览目录的权限。我通过在我的请求中添加了Authorization标头来确认这一点,然后按预期我得到了 404

答案 4 :(得分:-2)

我在网络配置中添加了以下行来修复问题,但它确实有效。

   <security>
        <authorization>
            <add accessType="Allow" users="*" />
        </authorization>
    </security>