CanActivate如何在Angular2中工作?

时间:2017-04-02 15:36:11

标签: angular login angular2-router canactivate

TL; DR CanActivate如何运作?

长版 这是我第一次看到客户端访问控制的实现。

在我目前使用的所有身份验证系统中(例如PHP或其他服务器端编程语言),总是有一个函数检查用户是否已经登录,如果这样的函数返回true则服务器可以传递页面,否则用户将被重定向到登录页面。

在这种情况下,客户端无法访问服务器代码,它只能发出请求并等待服务器编写页面,然后呈现它。

相反,Angular的工作方式不同。它是一个使用JavaScript的客户端框架,每个人都可以看到它的代码。私人页面没有安全地放置在服务器内,唯一的服务器任务是提供SPA,但它不能接受进一步的请求。

尽管如此,该框架实现了CanActivate的功能,并且运行良好。 所以我想知道是什么禁止我注入一些JavaScript代码并访问私人页面,即使我没有权利,或者更普遍的是这个系统是如何工作的。在互联网上,我没有找到足够的信息,而且我没有足够的技能来理解源代码。你能帮我澄清一下我的想法吗?

我可以在标题中问问题,但我更愿意告诉你我所知道的一切,所以如果出现问题,你可以纠正我。谢谢

1 个答案:

答案 0 :(得分:1)

CanActivate无法防范愚蠢和/或不安全的编程

TL; DR 即使在SPA中,敏感数据也受服务器保护,只有在请求传递了正确的身份验证令牌时才会返回。像CanActivate这样的包装器或装饰器,只是方便管理视图,没有真正的数据只是空壳!

长版

您的问题不是特定于CanActivate,而是关于客户端身份验证IMO的概念。您是正确的假设如果任何敏感数据已被推送到不应该没有正确身份验证的SPA,那么无论是否使用客户端身份验证都可以访问它。 然而,这不是客户端身份验证的重点。

方式CanActivate装饰器或任何其他JavaScript / Mobile Token认证系统的工作原理是,它向服务器发出认证请求,并且服务器返回认证令牌。

现在,SPA在其后续请求中会将该auth-token传递回服务器,如果身份验证令牌有效,服务器会在这些请求中发回真实数据。 / p>

SPA现在获取此数据并将其编译为用户视图。因此,虽然SPA在概念上是浏览器中的所有应用程序,但它应该(并且在理智的情况下)依赖于来自受认证保护的服务器的敏感数据。

对于来自更传统的基于会话的身份验证系统的人来说,这个概念应该没有太大的不同。如果是会话,则会在发送SAP令牌的情况下,使用后续请求发送身份验证cookie。在身份验证方面,这是唯一的区别。

对于返回的数据,对于SPA,服务器通常只返回数据,对于经典服务器端应用程序,服务器编译 view + data 并返回它。

希望有意义并有所帮助!