我们是否需要在客户端/消费者处验证JSON Web令牌?

时间:2015-08-27 00:54:01

标签: jwt

我正在研究一下JSON Web Token。我理解标题+声明由密钥签名,编码结果连接到" header.claims.signature"最后送回客户端。

我有一些基本的怀疑:

  • 我们是否需要在客户端/消费者处验证令牌(一旦从服务器收到令牌,为了真实性)?它是一个标准还是没有必要?有关此参考的任何示例吗?
  • 如果客户端需要验证令牌,我想它必须知道解密/解码的密钥。有没有其他方法可以让客户自行验证,而无需共享服务器的密钥?
  • 如果客户端知道密钥,我猜它也可以创建自己的令牌。如果是这种情况,服务器是否需要接受此类令牌(或依赖于应用程序/业务?)

1 个答案:

答案 0 :(得分:1)

我们需要在客户/消费者处验证令牌

在客户端,您通常不验证令牌。将其视为不透明令牌。确保安全并在向服务器发出请求时使用它。

如果客户端需要验证令牌,我想它必须知道密钥才能解密/解码。 如上所述,客户端不需要验证令牌。

在任何情况下,身份验证服务器(对用户进行身份验证并颁发令牌的实例)与资源服务器(拥有受保护资源并需要令牌进行授权的实例)都不相同,请进行签名和验证令牌的使用通常是通过非对称算法完成的,例如RS256,在这种算法中,私钥用于对令牌进行签名,并且只有身份验证服务器才能知道,而公钥用于验证签名。

如果客户端知道密钥,我想它也可以创建自己的令牌。如果是这种情况,服务器是否需要接受此类令牌(或者是否依赖于应用程序/业务?)

这就是为什么客户端不应该知道密钥的原因。 当使用对称密钥算法(例如HS256)(其中使用相同的密钥来签名和验证签名)时,您不能允许客户端知道密钥,因为它可能被滥用来创建伪造的令牌。然后,JWT将毫无意义。对于非对称密钥,如果客户知道公钥,就没有风险。