目前,我正在React的一个项目中工作,该项目具有受保护的路由(受JWT授权保护)。
根据用户的权限,某些页面的呈现方式有所不同。
这些权限在令牌有效负载中加密。
由于可以对JWT令牌进行解密和更改,因此理论上,用户可以 更改令牌,以访问他们实际上不应该访问的页面。
由于令牌失去了有效性,因此后端服务器将不会处理该特定用户的任何请求,因此不会造成任何损害。
我仍然不希望用户仅通过更改JWT令牌就能够访问受保护的页面。我对此问题的解决方案是将请求发送到验证令牌的端点。
根据端点的响应,将进行第二次API调用,然后将返回受保护页面的所需数据。
如果验证端点返回该令牌不再有效,则该用户将被重定向到登录页面。
登录>转到受保护的页面>验证令牌>访问受保护的页面
登录>更改收到的JWT令牌>转到受保护的路由>验证令牌>错误>登录页面
现在我的问题是:这是解决此问题的好方法吗?有更好的方法吗?
非常感谢您。 :)
答案 0 :(得分:0)
JWT令牌包含3个部分:
签名用于验证标头和有效载荷未更改。因此,攻击者需要为更改的令牌创建新的签名。从理论上讲,没有您的密钥几乎不可能创建有效的签名。
您建议的额外步骤不会执行任何操作。如果您的客户可以成功更改密钥,那么她可以轻松地绕过此步骤,并对受保护的资源进行API调用。
令牌验证步骤应在后端完成。
登录(前端)>转到受保护的路由(前端)>验证令牌(后端)>返回受保护的页面(后端)
登录(前端)>更改收到的JWT令牌(前端)>转到受保护的路由(前端)>验证令牌(后端)>返回错误(后端)>登录页面(前端)
修改 要在前端向用户隐藏视图: