我正在尝试实现JWT身份验证和授权,但是我担心前端部分的JWT篡改。我得到了后端的顺利和安全的工作。现在我在Angular 5中实现了JWT授权和身份验证。我是一个实现JWT令牌的初学者,所以请耐心听我说,希望你们能对此有所了解。
我知道,每当您篡改令牌时,JWT都会因为签名而失效。后端将拒绝处理该请求,但假设前端有以下场景:
1-恶意用户使用普通帐号登录,并从后端接收JWT令牌。
2-恶意用户通过向有效负载添加额外的"admin“角色来篡改JWT令牌(这会使jwt无效)
3-恶意用户试图访问持有被篡改的JWT令牌的受保护路由
4- Route guard检查令牌是否过期(通过检查有效负载中的过期声明?)
5-用户决定再次篡改JWT以增加JWT过期声明(根据后端,JWT token仍然无效)
6- Route对JWT进行解码,发现JWT未过期,并且用户具有管理员角色,并且允许恶意用户访问页面并看到呈现的HTML (后端操作是安全的,因为首先验证令牌)
我是不是遗漏了什么?我如何才能防止这种情况发生?我想阻止用户访问页面,即使它是半途而废。
发布于 2018-04-12 18:10:48
我觉得你说对了。
为了避免这种问题,您可以在用户第一次进入管理模块时发出请求,以检查令牌是否有效。如果没有,您将断开连接或重定向。
Secodn选项是让它流动,并实现一个HTTP拦截器。用户将能够看到后台的HTML,但他最终将不得不提出请求。在这种情况下,您将拦截器重定向到403个错误,这意味着您的用户将永远无法访问您的后端数据。
最后,您还可以在应用程序启动时存储令牌的初始值,并在用户进入管理模块时检查该值是否已更改。
如果值已更改,则用户使用其令牌,您只需重定向他即可。
https://stackoverflow.com/questions/49793317
复制相似问题