最近,我一直在考虑我正在开发的应用程序的安全性。客户端是在Angular上构建的,带有Rails API后端。从我可以收集的信息来看,普遍的共识是,如果它在客户端上,则认为它可能会受到损害。所以这让我想知道何时以及我是否应该使用canActivate
这样的路由,或者我应该每次在服务器上检查路由请求的授权。我想在canActivate
中将auth请求放到服务器上,但我认为canActivate
可以被黑客攻击以响应true
,从而绕过了对服务器响应的需求?如果是这样的话,canActivate
如果它只是一扇玻璃门,那又有什么意义呢?
答案 0 :(得分:3)
TL; DR:canActivate
卫兵不是为了安全而使用,而是为了用户体验。应该始终通过需要身份验证的API保护数据。
假设您有一个应用程序,该应用程序具有始终可访问的登录路由和一个秘密表,该表显示了已登录用户的秘密内容:
AuthGuard检查用户是否已登录,如果未通过身份验证,则重定向到登录。如您所说,就像客户端上的任何内容一样,这可能会受到损害。这就是为什么SecretsTable的机密数据应来自受保护的API调用。即使数据是静态的(对于任何用户而言都是相同的),您也不会将其包括在客户端应用程序中,而是通过此API调用对其进行保护。
那么我们需要AuthGuard吗?它不是为了安全而是为了用户体验。假设用户通过聊天程序收到URL myapp.io/secrets-table
。如果我们没有AuthGuard,则用户可能会收到一条错误消息(401)或看到一个空表视图。我们的数据受到保护,但仍然是糟糕的用户体验。更好:AuthGuard可以立即重定向到登录名,甚至可以在成功通过身份验证后将用户带回秘密表。另外,我们不必为每个视图都实现此逻辑,但可以将AuthGuard用于多个受保护的路由。