了解ASP.NET MVC5的新认证机制

ale*_*dru 7 asp.net-mvc oauth-2.0 asp.net-mvc-5

嗨我试图了解新的身份验证机制如何在SPA模板中的MVC5中工作,我似乎感到困惑.我的最终目标是创建一个将暴露给SPA,iOS,Android和Windows的API电话客户

这是我的理解:

我明白在启动时不知何故装饰的类:

[assembly: OwinStartup(typeof(WebApplication1.Startup))]
Run Code Online (Sandbox Code Playgroud)

神奇地调用ConfigureAuth方法:

在这个方法中,我有3行代码,在启动类构造函数中,我初始化了OAuth身份验证选项:

 static Startup(){
      PublicClientId = "self";

      UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());

      OAuthOptions = new OAuthAuthorizationServerOptions {
                TokenEndpointPath = new PathString("/Token"),
                Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
                AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                AllowInsecureHttp = true
      };
}

public void ConfigureAuth(IAppBuilder app)
{
     app.UseCookieAuthentication(new CookieAuthenticationOptions());
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
     app.UseOAuthBearerTokens(OAuthOptions);
}
Run Code Online (Sandbox Code Playgroud)

ConfigureAuth中的前两行似乎将我的应用程序和外部应用程序设置为使用cookie来存储身份验证状态,而第三行似乎表明它正在为我的应用程序使用承载令牌.

从目前为止我对移动设备有限的了解,本机应用程序不了解cookie,我应该使用令牌进行身份验证.

如果是这种情况,不应该将externalSignIn设置为Bearer tokes而不是外部cookie吗?

在调试时我还注意到在OAuthProvider中,身份验证类型实际上设置为bearrer令牌.如果是这样的话,这行代码实际上是这样做的:

app.UseCookieAuthentication(new CookieAuthenticationOptions());

对于如何工作的一些澄清将非常感激我只能在网上找到信息,告诉我如何使用外部登录.

Hol*_*olf 6

在我看来,MVC 5 SPA模板是对可能性的证明,而不仅仅是对特定最佳实践的承诺.

我发现删除该行app.UseCookieAuthentication(new CookieAuthenticationOptions());对SPA没有任何影响,因为正如SPA一样,所有需要的HTML都是匿名检索的,此后所有的身份验证都是在后续的数据请求中完成的.在这种情况下,将从WebAPI端点检索数据并使用承载令牌进行保护.

我不知道为什么这样做.还有许多其他领域,其中两个不同的问题有点混乱.例如,传统的Global.asax MVC Application_Start仍然存在,但新的OWIN启动机制也存在.没有理由Application_Start不能在OWIN Startup中处理(Filter/Route/Bundle注册等)中的所有内容.

还有其他问题.如果您打开外部身份验证(例如使用Google)然后减少AccessTokenExpireTimeSpan,则会发现当令牌过期时,您的SPA会显示"此请求已被拒绝授权".信息.换句话说,没有用于令牌刷新的机制.这并不是立即显而易见的,因为访问令牌超时设置为14天,这在考虑跨站点请求伪造攻击等时相当不安全.此外,没有强制执行传输安全机制,例如SSL.令牌本身并不安全,需要在传输中加以保护,以防止CRSF攻击和数据在途中被提取.

所以,MVC 5 SPA作为一个演示很好,我想,但我不会在生产中使用它.它显示了新的OWIN中间件可以做什么,但它无法替代基于令牌的安全性的全面知识.