在浏览器上验证JWT

时间:2018-08-18 14:21:10

标签: authentication jwt

我一直在阅读有关JWT的信息,并且我知道它分为三个部分,即headerpayloadsignature

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

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

问题:

  1. 如何在前端获得此secret key
  2. 有效负载可以保留有关用户的任何信息(不能保留任何敏感信息,例如密码)。由于JWT可能会被篡改,因此在不验证前端JWT的情况下使用有效载荷信息是否没有危险?

2 个答案:

答案 0 :(得分:1)

接收JWT的服务器是验证令牌的服务器。如果有人修改了令牌,则验证将失败并且访问将被拒绝,因为(希望如此)服务器外部没有人知道该机密,因此无法创建有效的令牌。如果客户知道秘密,尤其是。在浏览器/ js环境中,并使用对称对称算法,这会带来很大的安全风险,有人可以窃取秘密并使用有效签名创建新令牌。

答案 1 :(得分:0)

任何承载令牌都只能在HTTPS上使用。保护TLS连接的HTTPS具有内置的完整性检查,以防止在传输过程中进行修改。

因此,不需要在客户端验证令牌。

另外,最好将JWT令牌视为一些不透明的字符串。这样,发行服务器就可以加密其内容,而不会破坏您的应用程序。

正如其他人指出的那样,客户端永远不应拥有签名密钥,因为客户端永远不会被信任。

现在,如果使用不对称密钥对令牌进行签名,则可以下载公钥并验证令牌,而不会影响系统的安全性。那里有JavaScript库可以做到这一点,但是没有理由您应该这样做。