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

Call a Web API from MVC controller (cookie authentication)

我在同一个项目中有 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)
     {  }
}      

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

WebApi 遵守 REST,其中规定请求是无状态的。这意味着对于 WebApi 或任何与 REST 兼容的 API,没有诸如 cookie、会话等任何概念。对 API 的每个请求都必须包含 all 服务请求所需的信息。因此,如果您有一个端点需要身份验证,您 必须 对请求进行身份验证才能访问它。时期。如果您通过不记名令牌进行身份验证,那么您必须传递不记名令牌。

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

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

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