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)
Web Api是基于REST的.除其他外,REST是无状态的,意味着没有会话的概念.MVC中的身份验证是通过会话处理的,因此只需在应用程序的MVC端进行身份验证即可为Web Api端做任何事情.
每个Web Api请求必须具有满足该请求所需的所有信息,包括任何适用的身份验证/授权.通常使用API,这是通过在请求标头中传递身份验证令牌来处理的,但是您可以通过多种方式授权API请求.我建议只搜索"web api身份验证"之类的内容并阅读一下.
简而言之,授权Web api端点需要一个与MVC站点进行身份验证的不同且独立的过程.