从Mvc Windows身份验证问题调用WebApi

时间:2015-05-03 19:55:01

标签: c# asp.net asp.net-mvc asp.net-web-api

我花了一天的时间对此疯狂。我知道在这个网站上有很多类似问题的答案,以及互联网上的各种各样的东西,在我的特殊情况下,它们似乎都没有帮助我。我希望我在某个地方出错,或者误解某些东西。

首先,问题大纲。

我正在创建一个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/Websitehttp://localhost/WebApi访问),这是在域上。基于我读过的有关双跳问题的内容,我相信我的PC可以用于授权,这似乎没有任何帮助。

根据我读过的其他内容,我还将MVC网站和WebAPI网站的内容放在同一个项目中,因此在IIS的同一个网站上(这不是我想保留的情况,只是想要看它是否有帮助 - 它没有)。我也尝试打开Impersonation,关闭它,两者都无济于事。

我真的不确定下一步该去哪儿。

0 个答案:

没有答案
相关问题