我可以使用JWT在服务器和客户端之间创建数据交互,JWT使用相同的"秘密"?

时间:2016-12-24 06:01:09

标签: security web jwt json-web-token

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

如果用户向服务器发送请求,我可以在服务器上运行该过程并通过Web令牌将数据发送回浏览器,这就引出了一个问题:

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

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

我的考虑是在客户端上使用相同的"秘密"创建一个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

1 个答案:

答案 0 :(得分:0)

保密私钥。沿着网络发送它们是一种危险的解决方案,因为如果它们被盗则会破坏整个系统。您可以使用不对称的RSA密钥对而不是对称密钥对。 JWT使用私钥签名并经过公开验证

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

您建议浏览器也发出JWt令牌作为身份验证的形式。请考虑以下事项:

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