CanActivate 在 Angular2 中是如何工作的?



TL;DRCanActivate 如何工作?

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

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

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

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

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

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

CanActivate 不能防止愚蠢和/或不安全的编程

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

长版本

您的问题不是特定于CanActivate ,而是关于客户端身份验证IMO的概念。假设任何敏感数据已推送到 SPA,而这些数据不应未经适当的身份验证,则可以使用或不使用客户端身份验证来访问它,这是正确的。但是,这不是客户端身份验证的重点。

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

现在,SPA 在其后续请求中应将该身份验证令牌传递回服务器,如果身份验证令牌有效,则服务器将发回真实数据。

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

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

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

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

最新更新