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

mar*_*ark 6 javascript security jwt

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

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

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

das*_*s-g 4

你假设这个秘密是共享的。不一定是这样。(它只应该在相互信任的系统之间共享。您通常不能信任执行 JavaScript 的客户端。)

JWT 的典型用途是服务器使用密钥生成签名数据,并将签名数据(不带密钥)发送到某处(例如客户端)而不保留它。当它取回数据时,它可以验证(使用秘密而不是数据的持久副本)数据自签名以来没有被篡改。

该使用模式有什么应用?例如,您可以通过这种方式实现基于令牌的权限,从而无需身份验证即可进行身份验证:

假设您提供云存储服务。用户可以上传一个文件,您可以为其分配一些标识符,例如5. 您生成一个可共享 URL,其中包含 JWT 签名数据“可以访问文件 #5”作为其参数之一,并向用户显示该 URL。然后,用户及其与之共享此链接的每个人都可以通过该 URL 访问该文件。您只需验证该签名是您创建的有效签名,并且签名的数据指示正确的文件。当然,如果用户与之共享该 URL 的人进一步分发该 URL,其他人也可以通过这种方式获得访问权限。但如果不知道 URL,则无法访问该文件。