我花了一天的时间对此疯狂。我知道在这个网站上有很多类似问题的答案,以及互联网上的各种各样的东西,在我的特殊情况下,它们似乎都没有帮助我。我希望我在某个地方出错,或者误解某些东西。
首先,问题大纲。
我正在创建一个ASP.NET MVC5网站,它需要调用我正在创建的WebApi 2.2服务。两者都将托管在IIS中。这将是一个Intranet应用程序,并使用Windows集成身份验证进行保护。我需要用于访问MVC网站的用户帐户也是WebApi服务用来执行操作的用户帐户。
最初,我在IIS中将WebApi网站和MVC网站分开,但是在同一台机器上。
MVC网站部分有效。它知道用户是谁,而且一切都按照我的预期运作。
直接访问WebApi网站时,它也可以按预期工作,并知道用户是谁。
MVC网站使用以下代码来调用WebApi网站(我正在使用async / await但是在绝望时将其删除,以防它出现任何意外问题):
private HttpClient getClient()
{
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
var client = new HttpClient(handler);
client.BaseAddress = new Uri(webApiUrl);
return client;
}
public UserDTO GetMyUser()
{
var client = getClient();
var requestUrl = "api/User/GetMyDetails";
var request = client.GetAsync(requestUrl);
request.Wait();
var result = request.Result;
if (result.IsSuccessStatusCode)
{
var contentRequest = result.Content.ReadAsAsync<UserDTO>();
contentRequest.Wait();
var content = contentRequest.Result;
return content;
}
else
{
var str = result.Content.ReadAsStringAsync();
str.Wait();
var resultString = str.Result;
throw new UserException(resultString);
}
}
从MVC网站的控制器调用GetMyUser()方法。发生这种情况时,WebApi控制器中的User属性是网站应用程序池运行的服务帐户,我希望它与控制器上MVC网站的User属性报告的帐户相同。我假设这是“双跳”问题。
这一切当前都在我的PC上运行在本地IIS中(最初从http://localhost/Website和http://localhost/WebApi访问),这是在域上。基于我读过的有关双跳问题的内容,我相信我的PC可以用于授权,这似乎没有任何帮助。
根据我读过的其他内容,我还将MVC网站和WebAPI网站的内容放在同一个项目中,因此在IIS的同一个网站上(这不是我想保留的情况,只是想要看它是否有帮助 - 它没有)。我也尝试打开Impersonation,关闭它,两者都无济于事。
我真的不确定下一步该去哪儿。