保护JWT令牌

时间:2019-08-07 19:47:49

标签: api oauth-2.0 jwt

通常,JWT具有带有签名的编码消息。签名用于检查数据的真实性。我的问题是,此签名用于确保客户端有关服务器的信息,但是服务器如何信任客户端?换句话说,如果客户端将JWT发送到服务器,则服务器如何确定这是正确/经过身份验证的客户端?

我的第二个问题是关于智威汤逊的一生。我知道有一个声明(exp)可以设置为指示JWT的到期时间。但是,如果客户更改了该主张怎么办?我应该在服务器上保留到期日期以确保JWT仍然有效吗? Wikipedia说:要验证未撤销令牌中存储的会话,必须对照数据存储检查令牌断言。这使得令牌不再是无状态的,从而损害了JWT的主要优势。

2 个答案:

答案 0 :(得分:1)

给定一个JWT,服务器通过验证标头和有效载荷的HMAC等于签名来知道客户端是合法的。该服务器具有一个在计算HMAC时使用的秘密密钥,因此,如果有人想创建一个具有正确签名的假JWT,则他们需要有权访问此密钥。

您的第二个问题与第一个问题具有相同的想法。如果客户想要更改其JWT的到期时间,则他们必须重新计算签名,并且要成功执行此操作,他们必须知道密钥。

使用JWT的目的不是要在服务器上存储到期日期之类的数据,所有这些数据都驻留在令牌本身内部,并且此数据的完整性受到用于计算签名的秘密密钥的保护。 / p>

答案 1 :(得分:0)

JSON Web令牌(JWT)有两种。通常,最广泛使用的形式是将JWT与JSON Web签名(JWS)结合使用。在安全领域,这提供了 完整性 。另一种形式是带有JSON Web加密(JWE)的JWT。此表单同时提供 完整性 机密

因此,如果您有特定的要求来确定自己获得了有效的合格JWT,则应该采用基于JWE的方法。您可以在RFC7516中了解有关此内容的更多信息。对于加密,可以使用对称或非对称密钥。收到基于JWE的JWT后,您可以通过成功解密JWT有效负载来验证它是由预期的一方发送的。