首页 > 解决方案 > 在浏览器上验证 JWT

问题描述

我一直在阅读有关JWT的内容,我知道它包含三个部分,即headerpayloadsignature

我保留了标头中使用的散列算法,有效载荷中的基本信息,例如。有效载荷中的名称、年龄、角色、到期等,然后将这两者都进行 base64 编码,然后使用标头中指定的算法进行哈希处理以获得 JWT

  1. 我有一个可以使用username和登录的前端password
  2. 登录请求发送到对其进行身份验证并返回 JWT 的服务器。假设使用的算法是 HS256,它是一种对称密钥算法。
  3. 因此,服务器将拥有secret key生成 JWT 的用途。
  4. 作为登录请求响应的一部分,浏览器将拥有 JWT。
  5. 现在这个 JWT 可能会在途中被篡改,所以在使用它之前,我应该验证 JWT 的真实性。
  6. 为了验证,我需要密钥。

问题:

  1. 我如何secret key在前端得到这个?
  2. 有效负载可以保留有关用户的任何信息(不是任何敏感信息,例如密码)。既然JWT中途可以被篡改,那么在前端不验证JWT的情况下使用payload信息是不是很危险呢?

标签: authenticationjwt

解决方案


接收 JWT 的服务器是验证令牌的服务器。如果有人修改了令牌,验证将失败并且访问将被拒绝,因为(希望)服务器之外的任何人都不知道秘密,因此无法创建有效的令牌。如果客户知道秘密,特别是。在浏览器/js 环境和对称散列算法中,这是一个很大的安全风险,有人可能会窃取秘密并创建具有有效签名的新令牌。


推荐阅读