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

Sam*_*Sam 3 authentication asp.net-mvc asp.net-web-api

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

IIS和MVC的主机环境都是IIS.在IIS身份验证模式下,set是匿名的.

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

正确调用所有MVC控制器,但Web API控制器返回401未授权错误.

两个控制器中都使用了适当的authorize属性.

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

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

Chr*_*att 5

Web Api是基于REST的.除其他外,REST是无状态的,意味着没有会话的概念.MVC中的身份验证是通过会话处理的,因此只需在应用程序的MVC端进行身份验证即可为Web Api端做任何事情.

每个Web Api请求必须具有满足该请求所需的所有信息,包括任何适用的身份验证/授权.通常使用API​​,这是通过在请求标头中传递身份验证令牌来处理的,但是您可以通过多种方式授权API请求.我建议只搜索"web api身份验证"之类的内容并阅读一下.

简而言之,授权Web api端点需要一个与MVC站点进行身份验证的不同且独立的过程.