401 未经授权的错误 web api mvc windows 身份验证
Posted
技术标签:
【中文标题】401 未经授权的错误 web api mvc windows 身份验证【英文标题】:401 Unauthorized error web api mvc windows authentication 【发布时间】:2013-08-09 01:05:32 【问题描述】:我收到 401 未经授权的错误。我的网络服务是用 mvc 编写的。在 IIS 中配置为使用 windows 身份验证。 下面是提琴手的屏幕截图
当我从浏览器中点击 URL 时,它会弹出一个窗口来输入用户名和密码。 如何避免弹出窗口?
我正在从另一个窗口服务调用这个 web api。
【问题讨论】:
【参考方案1】:您可以指定用户名和密码作为 URL 的一部分:
http://username:password@www.example.com/foo/bar/baz
注意:仅仅因为你可以并不意味着你应该。虽然这可能是测试事物的临时解决方案,但我不建议在生产中这样做。在过去,我们就是这样做的。但正如@DiskJunky 指出的那样,“几乎任何人/任何人都可以轻松看到 URL”,其中包括您的浏览器历史记录、服务器日志,甚至可能更糟。
【讨论】:
我想这是因为将密码放入 URL 是安全的禁忌。几乎任何人/任何人都可以轻松看到 URL,并且将密码放在那里......至少可以说是不明智的。【参考方案2】:如果您使用的是 WebClient,则需要设置凭据。你是如何从 windows 服务调用 web api 的?
【讨论】:
【参考方案3】:我在 web config 中添加了以下行来解决问题并且它有效。
<security>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
</security>
【讨论】:
解除网站安全以解决本地化问题不是最好的主意,雪莉? 我们应该在哪里添加这些行? @Ashkan,你不应该理想,但它可以添加到Web.config
的<system.webServer>
部分
@DiskJunky tnx。我在 Windows 中的文件夹权限中发现了我的问题。我将 IUser 设置为我的文件夹并解决了问题。
此更改导致所有用户授权成功;因此禁用您尝试实施的任何安全性。如果这解决了您的问题,那么您应该使用“匿名身份验证”而不是“Windows 身份验证”。【参考方案4】:
我怀疑这两个 Web 服务可能托管在同一台服务器上。在这种情况下,问题可能是由环回检查引起的。为了测试,请尝试在不使用完全限定域名的情况下引用该服务并查看它是否有效。如果是,请使用以下步骤指定本地计算机上的主机名。
方法 1:指定主机名(如果需要 NTLM 身份验证,首选方法) (https://support.microsoft.com/en-us/help/926642/)
要指定映射到环回地址并可以连接到您计算机上的网站的主机名,请执行以下步骤:
-
将 DisableStrictNameChecking 注册表项设置为 1。有关如何执行此操作的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:281308 在基于 Windows 2000 的计算机或 Windows 上连接到 SMB 共享基于 Server 2003 的计算机可能无法使用别名
单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
在注册表编辑器中,找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
右键单击 MSV1_0,指向新建,然后单击多字符串值。
键入 BackConnectionHostNames,然后按 Enter。
右键单击 BackConnectionHostNames,然后单击修改。
在“数值数据”框中,键入本地计算机上站点的一个或多个主机名,然后单击“确定”。
退出注册表编辑器,然后重新启动 IISAdmin 服务。
https://docs.microsoft.com/en-gb/archive/blogs/sharepoint_foxhole/disableloopbackcheck-lets-do-it-the-right-way
**已编辑为答案的形式,并包含来自参考链接的详细步骤
【讨论】:
【参考方案5】:我的 2 美分:在部署 Web 应用程序时请求图像时,我遇到了一个被 HTTP 401 困扰的场景。我们使用 WiX 作为我们的包装和安装解决方案。 在这种特定情况下,安装程序没有打包映像,因此部署的实例上也不存在该路径。
有人可能想知道为什么在预期 404(未找到)的情况下会抛出 401 - 我的理解是,因为我们的路径不在根目录下但是像 root/content/images/image.png 之类的东西,我提出了一个匿名请求,我得到了 401(未经授权),因为我无权浏览目录。我通过在我的请求中添加一个 Authorization 标头来确认这一点,然后正如预期的那样,我得到了一个 404。
【讨论】:
以上是关于401 未经授权的错误 web api mvc windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Angular 6 对 .NET Web API 的跨域 POST 请求返回 401(未经授权)
烧瓶不和谐 api 错误 “消息”:“401:未经授权”,“代码”:0
GCM 的 API 密钥突然失效?未经授权的 (401) 错误