单页应用程序(SPA - Angular)和身份验证最佳实践?

17
我们正在研究最佳方式将标准身份验证(登录)与我们的Angular SPA集成。 我们遇到了两种模式(见下文),希望看看哪种被认为是将身份验证整合到我们的Angular网站中的“更好”架构。 模式1--保持登录页面单独,不与SPA集成(参见这里):在此模式中,登录过程在SPA之外进行(单独加载页面),一旦用户经过身份验证,他们将被重定向到SPA(另一个页面加载)。
模式2--将登录整合到SPA中(参见这里这里):在此模式中,身份验证流程在SPA中完成,并且登录状态通过Angular路由器和服务进行管理。
我们倾向于使用模式2,但我们希望听听SO社区的想法,以及您如何比较这两种模式。
谢谢!
1个回答

7

几个月前我也在考虑同样的问题,最终决定选择单页应用内部的登录解决方案。

我认为,决定两种方法之间的取舍的关键因素是,你是否介意在用户登录之前加载完整的应用程序。

如果登录界面是单页应用的一部分,那么在向用户呈现登录界面之前会进行引导。这有两个缺点。首先,您可能会提前加载大量js、css等您甚至不需要的内容。其次,您会让未经授权的用户访问您的代码。尽管这些都可以解决,但这些问题仍然需要考虑。

如果登录界面与单页应用分开,这将给您带来维护方面的负担,因为您必须维护在应用程序之外的东西,并且还需要与您的应用程序集成(例如主题、标志、字体等)。但即便如此,Gmail也在使用这种方法:P

我不知道您正在使用哪种服务器技术,但谷歌在ng-conf的演示文稿中提供了针对上述问题的一些很好的解决方案(不幸的是,在这项工作出现之前,我已经实现了我的解决方案)

https://docs.google.com/file/d/0B4F6Csor-S1cNThqekp4NUZCSmc/edit (从第9页开始)


我认为这两个问题都是小问题,因为它们都可以得到解决。第二个问题应该如何解决?我和楼主有同样的疑问,让用户在身份验证之前就能够获取我们所有的代码似乎是不合理的。 - bumbleshoot
你应该将客户端代码视为公共代码并开源。你不能在客户端代码中保留任何机密或知识产权。试图将客户端代码隐藏在登录页面背后,在绝大多数情况下不会让你走得太远。如果你这样做,可以随意尝试,但不应该给你一种虚假的安全感。 - masimplo
我明白了。所以即使需要一个有效的令牌才能从服务器请求内容,该内容仍然不安全?否则别人怎么可能得到它呢? - bumbleshoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接