例如,如何在使用JWT时保持共享密钥的秘密?

时间:2016-08-18 20:16:00

标签: javascript security jwt

我有一些非常基本的东西我不明白。为了使JWT安全,客户端和服务器必须共享秘密。

但是,客户端通常是在某个远程完全未知的客户端计算机上的浏览器中运行的JavaScript应用程序。

假设我是服务器和客户端代码的作者,我应该如何确保客户端共享密钥的安全性?

2 个答案:

答案 0 :(得分:3)

您认为秘密是共享的。它不是必须的。 (并且它只能在彼此信任的系统之间共享。您通常不能信任执行JavaScript的客户端。)

JWT的一个典型用途是服务器使用密钥生成签名数据,并在某处(例如客户端)发送签名数据(没有秘密)而不保留它。当它获得数据时,它可以验证(使用秘密而不是数据的持久副本)数据没有被篡改,因为已经签名。

使用模式有哪些应用程序?你可以,例如以这种方式实现基于令牌的权限,因此无需身份验证即可进行身份验证:

假设您提供云存储服务。用户可以上传您为其分配了一些标识符的文件,让我们说5。您生成一个可共享的URL,该URL具有JWT签名的数据"可以访问文件#5"作为其参数之一并显示该用户的URL。然后,用户和他们共享此链接的每个人都可以通过该URL访问该文件。您只需验证签名是否是您创建的有效签名,并且签名数据指示正确的文件。当然,如果与用户共享该URL的某个人进一步分发该URL,则其他人也可以通过该方式进行访问。但是,如果不了解URL,则无法访问该文件。

答案 1 :(得分:1)

与在auth上向客户端发送cookie然后依赖它进行其他操作相同。

是的,你不能确保客户的cookie安全,它们可能被盗。与jwt令牌相同可以被盗。

关于jwt的好处是令牌本身不是作为cookie的通信的一部分,所以你甚至可以在http通信中使用它 - 即使有人获得用户请求的有效载荷或标题他也不能使用其他数据创建新请求,这在使用cookie时是可能的。