在每个API调用之前验证JWT令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在每个API调用之前验证JWT令牌相关的知识,希望对你有一定的参考价值。

目前,我正在React的一个项目中工作,该项目具有受保护的路由(受JWT授权保护)。根据用户的权限,某些页面的呈现方式有所不同。这些权限在令牌有效负载中加密。由于可以对JWT令牌进行解密和更改,因此用户可以-[[理论上-更改令牌,以获得对他们实际上不应该访问的页面的访问权限。由于令牌失去了有效性,因此后端服务器将不会处理该特定用户的任何请求,因此不会造成任何损失。我仍然不希望用户仅通过更改JWT令牌就能够访问受保护的页面。我对此问题的解决方案是向验证令牌的端点发送请求。根据端点的响应,将进行第二次API调用,然后将返回受保护页面的所需数据。如果验证端点返回该令牌不再有效,则该用户将被重定向到登录页面。


登录>转到受保护的页面>验证令牌>访问受保护的页面登录>更改收到的JWT令牌>转到受保护的路由>验证令牌>错误>登录页面


现在我的问题是:这是解决此问题的好方法吗?有更好的方法吗?

非常感谢。 :)

答案
JWT令牌包含3个部分:

    标题
  • 有效负载
  • 签名
  • 签名用于验证页眉和有效载荷未更改。因此,攻击者需要为更改的令牌创建新的签名。从理论上讲,没有您的秘密密钥就几乎不可能创建有效的签名。

    您建议的额外步骤不会执行任何操作。如果您的客户可以成功更改密钥,那么她可以轻松地绕过此步骤,并对受保护的资源进行API调用。

    令牌验证步骤应在后端完成。

    • 登录(前端)>转到受保护的路由(前端)>验证令牌(后端)>返回受保护的页面(后端)
    • 登录(前端)>更改收到的JWT令牌(前端)>转到受保护的路由(前端)>验证令牌(后端)>返回错误(后端)>登录页面(前端)
  • 以上是关于在每个API调用之前验证JWT令牌的主要内容,如果未能解决你的问题,请参考以下文章

    验证 API 密钥和 JWT 令牌是微服务的责任吗?

    如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?

    Angular 6在令牌更新后重制请求之前更改JWT令牌

    在 vert.x 中获取用户并验证 JWT 令牌

    Axios - 防止在外部 api 调用上发送 JWT 令牌

    如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?