我是AngularJS和WebAPI的新手,我正在为我的组织创建一个SPA模板,该模板成为制作快速SPA的锅炉板:
在startup.Auth.cs。我使用以下授权选项:
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOAuthBearerTokens(OAuthOptions);
我创建了一个小图来解释数据流
现在,WebAPI和MVC控制器将分为1层,但架构应允许它们分开。
现在,我的问题是
答案 0 :(得分:0)
[Authorize]属性检查是否在MVC和Web API都使用的Request对象上设置了IsAuthenticated属性。此属性由Identity中间件设置,正如您在startup.cs文件中配置的那样。
每个请求都会在到达MVC或Web API控制器之前流经OWIN中间件管道。然后中间件可以改变甚至完全处理请求。本质上,MVC和Web API本身也是中间件,说“嘿,如果这个url请求符合这条路线,我会处理它们”。 ASP.NET Identity是一个中间件,它不会完成请求,但会在将其传递到管道之前对其进行更改。它会检查请求中提供的凭据(在您的情况下,以Web API的承载令牌形式或以MVC的cookie形式)。如果找到它们,则会将身份验证详细信息添加到请求对象中,然后由Web API或MVC使用它来执行[授权]检查。
您的应用程序仅接受它自己分发的令牌的原因是因为它使用仅为应用程序本身知道的密钥加密。如果您打算接受从其他应用程序加密的令牌,这些应用程序应使用相同的私钥进行加密。您可以在web.config中配置这些密钥。请小心不要丢失这些密钥(例如,不要将带有这些详细信息的web.config添加到git存储库中)。或者,您可以设置一个单独的授权服务器,该服务器在依赖它的不同应用程序之间进行调解。
希望这有帮助!