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

时间:2014-02-22 16:07:23

标签: asp.net-mvc oauth-2.0 asp.net-mvc-5

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

以下是我的理解:

我理解在启动时以某种方式装饰的类:

[assembly: OwinStartup(typeof(WebApplication1.Startup))]

神奇地调用了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);
}

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

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

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

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

app.UseCookieAuthentication(new CookieAuthenticationOptions());

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

1 个答案:

答案 0 :(得分:5)

在我看来,MVC 5 SPA模板证明了对特定最佳实践的承诺是可能的。

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

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

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

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