【问题标题】:How to call a Web API service from MVC using windows authentication?如何使用 Windows 身份验证从 MVC 调用 Web API 服务?
【发布时间】:2016-08-20 17:39:30
【问题描述】:

我查看了很多解决此问题的问题,但似乎没有任何效果。我正在尝试从 mvc Web 应用程序调用 Web api 服务。这是我的客户代码:

var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true })
{
    BaseAddress = baseAddress
};
var response = await client.GetAsync("items/5");

当我在本地运行它时,它可以工作。当我将项目发布到服务器时,api 总是返回 401 Unauthorized。我在 IIS 中的 web api 和 mvc 项目上启用了 windows 身份验证。如何从 mvc 应用程序获取到 api 的正确 Windows 凭据? web api 和 mvc 应用在同一个 IIS 服务器上运行。

【问题讨论】:

  • 此应用程序代码在什么上下文中运行?另一个网络应用程序?控制台应用程序?这就是您要设置正确身份验证的地方。
  • @CamBruce 此客户端代码正在由 mvc Web 应用程序运行

标签: c# asp.net-mvc iis


【解决方案1】:

问题在于,如果您尝试使用完全限定域名向同一台机器发送请求,该请求将自动无法防御反射攻击。

我通过从

更改 baseAddress 来解决此问题
http://example.com/api

http://localhost/api

【讨论】:

    【解决方案2】:

    如果 MVC 应用程序偶然可以使用相同的 Windows 凭据向 WebAPI 发出所有请求,那么我认为您应该能够将 IIS 的应用程序池配置为以域用户身份运行。默认情况下,IIS 的应用程序池作为某个机器本地帐户运行。因此,如果它试图通过网络向 Windows Authenticated 资源发出请求,远程计算机将无法识别 Web 服务器的计算机本地帐户。因此出现未经授权的错误。

    但是,如果您想让 MVC 应用以向 MVC 应用发出请求的用户身份调用 WebAPI,则需要在 web.config 中打开模拟。由于 Kerberos/Active Directory 的工作方式(查找 kerberos 双跃点),您可能还需要让域管理员为您的 Web 服务器计算机启用 Kerberos 委派。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2010-10-09
      • 2016-07-17
      • 2016-10-06
      • 2013-12-09
      • 2016-06-10
      • 2017-09-06
      相关资源
      最近更新 更多