powershell - 本地服务器上的 Invoke-RestMethod 身份验证失败

标签 powershell asp.net-core-webapi

我有一个 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/

步骤...

  1. 将DisableStrictNameChecking 注册表项设置为1。有关如何执行此操作的更多信息,请参阅文章281308在 Microsoft 知识库中。
  2. 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
  3. 在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  4. 右键单击 MSV1_0,指向“新建”,然后单击“多字符串值”。
  5. 键入 BackConnectionHostNames,然后按 Enter。
  6. 右键单击 BackConnectionHostNames,然后单击“修改”。
  7. 在“值数据”框中,键入主机名或本地计算机上站点的主机名,然后单击“确定”。
  8. 退出注册表编辑器,然后重新启动 IISAdmin 服务。 (为此,我从 Powershell 提示符下运行 iisreset)

关于powershell - 本地服务器上的 Invoke-RestMethod 身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824005/

相关文章:

powershell - 如何自动化自定义命令提示符的过程?

vb.net - 从 .NET 应用程序使用 if 条件运行 Powershell 脚本

powershell - 使用Powershell脚本获取字符串中具有特定日期的文件

regex - 使用“选择字符串”时,RegEx不匹配

c# - 在不使用 RouteAttribute 的情况下使用 ApiControllerAttribute

azure - .net core web api 在发布到 azure 时响应 500

c# - 如何获取我在 Asp.Net 核心的 Startup.ConfigureServices 中添加的所有授权策略?

azure - 无法从 powershell 恢复应用程序

c# - Entity Framework Core 是否支持数据库密码轮换

c# - 查询字符串和属性路由一起用于 Controller .NET 核心 Web API