401未经授权的错误Web API MVC Windows身份验证。

7

我遇到了401未授权错误。我的Web服务是用MVC编写的,在IIS中配置为使用Windows身份验证。

以下是Fiddler的屏幕截图:

enter image description here

当我在浏览器中访问URL时,会出现弹出窗口要求我输入用户名和密码。如何避免弹出窗口?

我从另一个窗口服务调用此Web API。

5个回答

4
我怀疑这两个网络服务可能托管在同一台服务器上。在这种情况下,问题可能是由回环检查引起的。为了测试,请尝试不使用完全限定域名引用服务,看看是否有效。如果有效,请使用以下步骤指定本地计算机上的主机名。 方法1:指定主机名(如果需要NTLM身份验证,则首选此方法)https://support.microsoft.com/en-us/help/926642/
要指定映射到回环地址并可以连接到计算机上的网站的主机名,请按照以下步骤操作:
  1. 将DisableStrictNameChecking注册表项设置为1。有关如何执行此操作的详细信息,请单击以下文章编号以在Microsoft知识库中查看文章: 281308与别名名称一起使用时,连接到基于Windows 2000的计算机或基于Windows Server 2003的计算机上的SMB共享可能无法工作
  2. 单击“开始”,单击“运行”,键入“regedit”,然后单击“确定”。
  3. 在注册表编辑器中,找到并单击以下注册表键: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  4. 右键单击MSV1_0,指向新建,然后单击多字符串值。
  5. 键入BackConnectionHostNames,然后按ENTER。
  6. 右键单击BackConnectionHostNames,然后单击修改。
  7. 在值数据框中,键入本地计算机上站点的主机名或主机名,然后单击“确定”。
  8. 退出注册表编辑器,然后重新启动IISAdmin服务。

https://learn.microsoft.com/en-gb/archive/blogs/sharepoint_foxhole/disableloopbackcheck-lets-do-it-the-right-way

**已编辑为回答形式,并包含来自引用链接的详细步骤。

3
如果您正在使用WebClient,则需要设置凭据。您是如何从Windows服务调用Web API的?

1
我个人的经验:我们在部署Web应用程序时遇到了一个HTTP 401错误,当请求图像时,我们感到困惑。我们使用WiX作为打包和安装解决方案。 在这种特定情况下,图像没有被安装程序打包,因此路径在部署实例上不存在。
也许有人会奇怪为什么会抛出401而不是404(未找到) - 我的理解是,由于我们的路径不直接位于根目录下,而是类似于root/content/images/image.png,我发出了匿名请求,因此我没有浏览目录的权限而得到了401(未经授权)。通过向我的请求添加Authorization标头进行确认,结果如预期所示,我收到了404。

1
您可以在URL的一部分中指定用户名和密码:
http://username:password@www.example.com/foo/bar/baz

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

2
我想这是因为在URL中放置密码是一种安全禁忌。 URL几乎可以被任何人/任何东西轻松查看,将密码放在那里是不明智的,至少可以这么说。 - DiskJunky

-2
我在web config中添加了以下行来解决问题,而且它起作用了。
   <security>
        <authorization>
            <add accessType="Allow" users="*" />
        </authorization>
    </security>

10
为了解决一个局部问题而取消您网站的安全措施,这不是明智之举,Shirley吧? - pfeds
我们应该在哪里添加这些行? - Ashkan
@Ashkan,理论上不应该这样做,但是可以将其添加到“Web.config”的<system.webServer>部分。 - DiskJunky
1
@DiskJunky 谢谢。我发现我的问题在于Windows中的文件夹权限。我把IUser设置为我的文件夹,问题解决了。 - Ashkan
这个更改会导致所有用户成功授权,因此禁用了您尝试实施的任何安全性。如果这解决了您的问题,那么您应该使用“匿名身份验证”而不是“Windows身份验证”。 - Null511

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接