VS2013(RTW):SPA模板与MVC5模板的身份验证差异?

时间:2013-10-19 17:22:33

标签: visual-studio-2013 asp.net-mvc-5 owin asp.net-identity katana

我一直在使用VS2013 RTW MVC模板中的新ASP.NET身份产品(用于“个人用户帐户”),并且效果很好:我能够在定制数据的方式时整合Facebook登录序列

一切都很好,但我注意到如果我创建一个新的SPA应用程序(而不是MVC),身份验证故事似乎非常不同。举个例子:

来自SPA模板:

    public AccountController()
        : this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
    {
    }

    public AccountController(UserManager<IdentityUser> userManager,
        ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
    {
        UserManager = userManager;
        AccessTokenFormat = accessTokenFormat;
    }

来自MVC模板:

    public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;
    }

这只是Account控制器构造函数的区别。还有许多其他差异。使用MVC版本,我能够轻松地从ApplicationDBContext派生我自己的上下文类,并使用它来存储我自己的表和身份验证表。我无法弄清楚如何在SPA模板中自定义数据存储。

此外,SPA模板包含并使用此类:   公共类ApplicationOAuthProvider:OAuthAuthorizationServerProvider

MVC模板未定义(或使用)此类。

我不明白为什么MVC模板和SPA模板之间需要有任何差异。

在这两个模板中,有人可以给我一些指导,说明为什么认证处理方式如此不同?从头开始一个项目,两者之间是否有一条首选路径? (看起来MVC模板中的代码是最好的,特别是在通过定义自定义EF Context类来定制数据存储方式方面。)

...谢谢

-Ben

2 个答案:

答案 0 :(得分:4)

将MVC和SPA项目模板作为Controller vs ApiController实施示例。 以及CookieAuthentication和oAuthAuthentication。

  • MVC在第一个请求时使用Controller以及所有后续请求(具有请求定义的操作方法)。
  • SPA在第一次请求SPA时使用Controller,所有其他交互由ApiController处理。
  • MVC使用cookie身份验证。
  • SPA使用oAuth身份验证。

现在在真正的应用程序中,我们需要兼顾两者。说明这一点,你也可以在SPA中使用IdentityModel.cs(ApplicationDBContext)和它的MVC项目的自定义副本。

在oAuth实施中,令牌以GrantResourceOwnerCredentials ApplicationOAuthProvider方式发布。默认情况下,用户验证使用相同的Identity框架数据库。此外,oAuth在ApiController中提供身份验证检查。在示例实现中,提供了oAuth的ResourceOwner流程,用于验证用户的用户名和密码。

在我看来,模板是起点示例。

答案 1 :(得分:1)

当我第一次看到有关为用户更改模型的所有帖子时,我确实注意到了同样的事情,我在SPA模板中找不到该模型。当然,@ jd4u指出的差异是一个基于Controller而另一个基于ApiController。

所以,我决定看看如何使SPA解决方案使用与MVC模板相同的Identity Model扩展。我创建了一个post,它经历了我经历的过程。底部有一个链接,可以从GitHub下载代码。