代码之家  ›  专栏  ›  技术社区  ›  BenjiFB

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

  •  2
  • BenjiFB  · 技术社区  · 12 年前

    我一直在玩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上下文类来自定义数据存储方式方面。)

    谢谢

    -本

    2 回复  |  直到 12 年前
        1
  •  4
  •   jd4u    12 年前

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

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

    现在,在实际应用程序中,我们需要两者兼而有之。说明这一点,您可以使用IdentityModel.cs(ApplicationDBContext),它也是SPA中MVC项目的自定义副本。

    在oAuth实现中,令牌在 GrantResourceOwnerCredentials 方法 ApplicationOAuthProvider 。默认情况下,用户验证使用与Identity framework相同的数据库。此外,oAuth在ApiController中提供身份验证检查。在示例实现中,提供了oAuth的ResourceOwner流,其中验证了用户的用户名和密码。

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

        2
  •  1
  •   Laurel Enrique    9 年前

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

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

    推荐文章