从MVC控制器调用Web API(cookie身份验证)

时间:2016-06-06 18:49:16

标签: asp.net-mvc asp.net-web-api bearer-token

我在同一个项目上有一个Web Api和Mvc 5。 Web Api受到承载令牌的保护(但我注释了SuppressDefaultHostAuthentication行,因此当我使用cookie mvc进行身份验证时,我可以从浏览器访问api)

现在我试图在不发送令牌的情况下从mvc控制器访问api,是否可以关闭SuppressDefaultHostAuthentication?

尝试没有成功(401错误):

HttpClientHandler handler = new HttpClientHandler()
{
     PreAuthenticate = true,
     UseDefaultCredentials = true
};

using (var client = new HttpClient(handler))
{
     client.BaseAddress = new Uri("http://localhost:11374/");
     client.DefaultRequestHeaders.Accept.Clear();
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

     var response = client.GetAsync("api/MyApi").Result;
     if (response.IsSuccessStatusCode)
     {  }
}      

如果不可能,那么处理这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

WebApi遵循REST,除其他外,它决定请求是无状态的。这意味着使用WebApi或任何与REST兼容的API,没有任何概念,例如cookie,会话等。对API的每个请求都必须包含服务请求所需的所有信息。因此,如果您的端点需要身份验证,则必须对访问它的请求进行身份验证。期。如果您通过承载令牌进行身份验证,那么必须传递持有者令牌。

答案 1 :(得分:2)

由于WebAPI和MVC应用程序位于同一个项目中,因此您不需要通过HTTP并发出请求以访问每个方法 - 它们是邻居:)

您可以将WebAPI视为普通类,并在MVC控制器中实例化它。然后,您可以像处理应用程序中的任何其他对象一样调用实例上的方法。

但是,如果您通过HTTP利用请求来访问它,则无法避免WebAPI设计的令牌和/或其他安全机制。