2016-04-26 40 views
1

我看了很多问题解决这个问题,似乎没有任何工作。我正在尝试从mvc Web应用程序调用Web API服务。这是我的客户代码:如何使用Windows身份验证从MVC调用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应用程序获取正确的Windows凭据到api? Web api和mvc应用程序在同一个IIS服务器上运行。

+0

在被这个应用程序代码运行的情况下解决了这个问题?另一个Web App?控制台程序?那就是你要设置正确认证的地方。 –

+0

@CamBruce此客户端代码正在由mvc web应用运行 –

回答

2

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

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

0

问题是,显然如果您尝试使用完全限定的域名向同一台计算机发送请求,请求将自动无法防范反射攻击。

我从

http://example.com/api 

改变baseAddress到

http://localhost/api 
相关问题