CanActivate在Angular2中如何工作?

CanActivate在Angular2中如何工作?,angular,login,angular2-router,canactivate,Angular,Login,Angular2 Router,Canactivate,TL;DR CanActivate是如何工作的 长版本 这是我第一次看到客户端访问控制的实现 在我目前使用的所有身份验证系统(例如PHP或其他服务器端编程语言)中,总是有一个函数检查用户是否已经登录,如果该函数返回true,服务器可以传递页面,否则用户将被重定向到登录页面 在这种情况下,客户端无法访问服务器代码,它只能发出请求并等待服务器编写页面,然后呈现页面 相反,Angular的工作方式不同。它是一个使用JavaScript的客户端框架,其代码人人可见。私有页面没有安全地放置在服务器内部,服

TL;DR CanActivate是如何工作的

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

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

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

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

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


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

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

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

长版本

您的问题不是针对CanActivate的,而是关于客户端身份验证IMO的概念。您的假设是正确的,即如果任何敏感数据被推送到SPA,而该敏感数据不应在没有适当身份验证的情况下被推送到SPA,那么无论是否有客户端身份验证,都可以访问该敏感数据但是,这不是客户端身份验证的重点。

CanActivate decorator或任何其他JavaScript/移动令牌身份验证系统的工作方式是,它向服务器发出身份验证请求,服务器返回身份验证令牌

现在,SPA在其后续请求中希望将该身份验证令牌传递回服务器,并且如果身份验证令牌有效,服务器将在这些请求中发回real数据

SPA现在获取这些数据并将其编译成供用户查看的视图。因此,虽然SPA在概念上是一个完全在浏览器中的应用程序,但它应该(并且在正常情况下)依赖于来自受身份验证保护的服务器的敏感数据

对于来自更传统的基于会话的身份验证系统的人来说,这个概念应该没有太大的不同。在会话的情况下,身份验证cookie随子序列请求一起发送,在SAPs令牌被发回的情况下。说到身份验证,这是唯一的区别

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


希望这是有意义和有帮助的

您仍然需要服务器端身份验证(因为恶意用户无论如何都可以访问任何内容)。路由器提供的保护方法对您来说有点方便。您应该交付没有硬编码秘密数据的空模板,并为授权用户填充它们。与对每个组件/页面进行权限检查不同,
CanActivate
允许您将其保存在一个位置并重新使用。最近,我需要一些时间来尝试深化你的答案。非常感谢你