从 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 设计的其他安全机制。
我在同一个项目中有 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 设计的其他安全机制。