我有一个 WebApi(.Net Core 2、Windows 身份验证)端点,我可以从 PS/Windows 版本的多种组合成功调用该端点:
Invoke-RestMethod -Uri https://<fqdn>/api/notification -UseDefaultCredentials
但是当我在托管 Web 应用程序的服务器上本地运行它(使用相同的 AD 帐户)时,它无法进行身份验证。来自其他计算机的请求的 IIS 日志显示发出请求的用户帐户,但本地请求显示该字段的空值。
PS 错误:
HTTP Error 401.1 - Unauthorized You do not have permission to view this directory or page using the credentials that you supplied.
IIS 日志条目:
2018-06-12 21:42:31 GET /api/notification - 443 - Mozilla/5.0+(Windows+NT;+Windows+NT+6.3;+en-US)+WindowsPowerShell/5.1.14409.1012 - 401 1 3221225581 0
来自除本地服务器之外的任何其他计算机的条目都会在端口号后包含 DOMAIN\User 并且会成功。
最佳答案
禁用严格的名称检查。以下是文章的摘要: https://www.andrewcbancroft.com/2016/01/21/401-unauthorized-browsing-site-from-local-iis-instance/
步骤...
- 将DisableStrictNameChecking 注册表项设置为1。有关如何执行此操作的更多信息,请参阅文章281308在 Microsoft 知识库中。
- 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
- 在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
- 右键单击 MSV1_0,指向“新建”,然后单击“多字符串值”。
- 键入 BackConnectionHostNames,然后按 Enter。
- 右键单击 BackConnectionHostNames,然后单击“修改”。
- 在“值数据”框中,键入主机名或本地计算机上站点的主机名,然后单击“确定”。
- 退出注册表编辑器,然后重新启动 IISAdmin 服务。 (为此,我从 Powershell 提示符下运行 iisreset)
关于powershell - 本地服务器上的 Invoke-RestMethod 身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824005/