7

我收到 401 未经授权的错误。我的网络服务是用 mvc 编写的。在 IIS 中配置为使用 windows 身份验证。下面是提琴手的屏幕截图 在此处输入图像描述

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

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

4

5 回答 5

4

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

方法 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://docs.microsoft.com/en-gb/archive/blogs/sharepoint_foxhole/disableloopbackcheck-lets-do-it-the-right-way

**编辑为答案的形式,并包括来自参考链接的详细步骤

于 2014-06-20T18:57:51.930 回答
3

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

于 2013-08-07T15:45:16.257 回答
1

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

有人可能想知道为什么会在预期出现404 (未找到)时抛出401 - 我的理解是,因为我们的路径不是直接在根目录下,而是类似于 root/content/images/image.png,我做了一个匿名请求,我得到了 401(未经授权),因为我无权浏览目录。我通过在我的请求中添加 Authorization 标头来确认这一点,然后正如预期的那样,我得到了404

于 2014-11-21T06:31:10.013 回答
1

您可以将用户名和密码指定为 URL 的一部分:

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

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

于 2013-08-07T15:12:24.290 回答
-2

我在 web config 中添加了以下行来解决问题并且它有效。

   <security>
        <authorization>
            <add accessType="Allow" users="*" />
        </authorization>
    </security>
于 2013-08-07T19:31:43.807 回答