Web API 控制器和 MVC 控制器 - 身份验证

Web API controller and MVC controller - Authentication

我有一个 MVC 应用程序。它还使用 Web API 控制器公开的服务。

MVC 和 Web 的托管环境 API 是 IIS。 在 IIS 中,身份验证模式集是匿名的。

HttpModule 用于将User 的身份和角色设置为Thread 和HttpContext 对象。

正在正确调用所有 MVC 控制器,但 Web API 控制器 return 401 未授权错误。

两个控制器都使用了适当的授权属性。

下面是使用用户将用户设置为线程和上下文对象的代码。

var principal = new GenericPrincipal(new GenericIdentity(userName), roles);
                // contextBase.User = principal;
                HttpContext.Current.User = principal;
                Thread.CurrentPrincipal = principal;

Web Api 是 REST-based。除此之外,REST 是 stateless,意味着没有 session 的概念。 MVC 中的身份验证是通过 sessions 处理的,因此仅在应用程序的 MVC 端进行身份验证对 Web Api 端没有任何作用。

每个 Web Api 请求都必须包含满足该请求所需的所有信息,其中包括任何适用的 authentication/authorization。通常使用 API,这是通过在请求 headers 中传递身份验证令牌来处理的,但是您可以通过多种方式授权 API 请求。我建议只 searching for something like "web api authentication" 和阅读一点。

总而言之,授权 Web api 端点需要一个不同于通过 MVC 站点进行身份验证的独立过程。