1

TL;DR CanActivate 如何工作?

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

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

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

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

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

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

4

1 回答 1

1

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

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

长版

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

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

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

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

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

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

希望这有意义并有所帮助!

于 2017-04-02T16:02:06.920 回答