我可以使用相同的 "secret" 使用 JWT 创建 Server 和 Client 之间的数据交互吗?

Can I create data interaction between Server and Client with JWT, which use the same "secret"?

我尝试使用 JWT 创建 Web 应用程序:

如果用户向服务器发送请求,我可以 运行 服务器上的进程并将数据以网络令牌的形式发送回浏览器,这让我想到了这个问题:

如何在浏览器中验证此服务器响应,并使用 JWT 和可从服务器接受的密码向服务器发送新请求?

在服务器上,来自浏览器请求的 JWT 应该被验证。

我的考虑是在客户端创建一个具有相同 "secret" 的 JWT,但这对攻击者来说是可读的,因为可以读取源代码(开发者控制台)。

有办法吗?

//Create request JWT
Request 1 --> {head: ...; data:..., secrete: secret}
//Request should be checkted on the server (secrete)  
// create a Resonse JWT and send back to the Client
Resonse 1 --> {head: ...; data:..., secrete: secret}
//Client verify the Respons JWT by the secrete

对私钥保密。通过网络发送它们是一种危险的解决方案,因为如果它们被盗,整个系统就会崩溃。您可以使用非对称 RSA 密钥对代替对称密钥对。 JWT 使用私钥签名并使用 public

进行验证

在通常情况下,当用户未被识别时,服务器需要在浏览器中向用户提供凭据,并颁发新的 JWT 令牌。浏览器中的客户端应用程序在后续的身份验证请求中包含 JWT 令牌。服务器验证令牌签名。

您建议浏览器也发布 JWt 令牌作为一种身份验证形式。考虑以下因素:

  • 您将需要一个非对称密钥对
  • 在浏览器中生成密钥,不通过网络发送私钥
  • 保持密钥安全:我建议使用本机网络加密api,因为与任何其他加密库不同,它允许在不公开内容的情况下生成和使用密钥,即不能被盗
  • 将public密钥发送到服务器并将其与用户帐户相关联