我是AngularJS的新手,正在尝试为我的新Web应用程序对其进行评估。
我将有一个ASP.NET Web API,它将从Android,iPhone和Web应用程序(ASP.NET MVC)中使用。ASP.NET Identity将在Web API中实现。这三个应用程序都将调用Web API的login方法来获取auth令牌。
我的问题是当Angular进行调用以获取HTML模板/视图,JavaScript文件时,如何获得ASP.NET MVC 服务器端身份验证 工作(与Web API同步,因此我不必分别登录ASP.NET MVC)或其他资源。我在AngularJS上浏览了许多文章和博客,但仍然找不到适合我要求的安全模型。
将登录调用直接调用ASP.NET MVC应用程序而不是Web API是一个好主意,并且ASP.NET MVC应用程序将调用Web API进行登录,并在进行身份验证之后,将auth令牌保存在会话中并创建一个 FormsAuthentication cookie 和cookie数据中的数据将保存加密的auth令牌。此外,在HTML的 ng-init 中将 auth令牌 设置为AngularJS范围内的令牌。现在,当AngularJS尝试调用ASP.NET MVC应用程序以获取HTML时,然后通过将cookie中解密的数据与会话中的auth数据进行匹配来对用户进行身份验证/授权。另外,AngularJS将 在标头中 发送 auth令牌,以 直接 调用Web API方法 ,以用于随后通过Web API进行数据操作的所有后续调用。
我用非常严格的向前解决方案解决了这个问题。我只是确保在WebApiConfig的Register方法中有以下两行代码:
config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
而已。现在,我的MVC控制器在寻找会话cookie以进行授权,而我的Web API控制器在每个请求的标头中寻找auth令牌。此外,Web API会响应登录/身份验证请求(例如)发送令牌(JSON)和会话cookie本身http:\\www.mydomain.com\token。
http:\\www.mydomain.com\token
因此,现在我将登录请求发送到Web API以获取令牌以及会话cookie。会话Cookie将在每个请求时自动发送,因此我不必担心MVC控制器的授权。对于Web API调用,我将在每个请求的标头中发送auth令牌,因为Web API控制器不关心与请求一起发送的会话cookie。