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

Security 我可以用JWT在服务器和客户端之间创建数据交互吗?JWT使用相同的;秘密;?,security,web,jwt,json-web-token,Security,Web,Jwt,Json Web Token,我尝试使用JWT创建一个Web应用程序: 如果用户向服务器发送请求,我可以在服务器上运行该过程,并以web令牌的形式将数据发送回浏览器,这就引出了一个问题: 如何在浏览器中验证此服务器响应,并通过使用JWT向服务器发送新请求,该JWT具有可从服务器接受的机密 在服务器上,应该验证来自浏览器请求的JWT 我考虑的是在客户端上创建一个具有相同“机密”的JWT,但这对于攻击者来说是可读的,因为可以读取源代码(开发人员控制台) 有办法吗 //Create request JWT Request 1 --

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

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

如何在浏览器中验证此服务器响应,并通过使用JWT向服务器发送新请求,该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

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

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

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

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

新年快乐!!在实现过程中,出现了一个问题,我试图找到一个解决方案,但没有成功。我试图解释:步骤1-用户发送请求(用户名和密码),请求将通过公钥加密。第2步-使用私钥,服务器可以解密和验证用户,并将响应发送回。这是一个巨大的未知数。如何在浏览器上验证来自服务器的响应?我只能用私钥解密代码,但我必须将此密钥保持为私钥。我知道,在使用非对称密钥的情况下,有必要运行以下步骤:1-客户端:令牌+服务器公钥,2。服务器:将私钥添加到令牌并将其发送回客户端,3。客户端:删除公钥并将带有私钥的令牌发送到服务器,然后decrytion可以完全成功运行。但目前我还不知道该怎么做。我尝试使用以下API和注释1)您需要两个密钥对,用于客户端和服务器。请注意,验证它与加密不同。验证检查内容上的数字签名,加密隐藏消息本身的内容。另一种方法是使用客户端和服务器共享的对称加密密钥。客户端生成AES密钥并将其发送到服务器,并使用服务器RSA公钥进行加密。共享AES密钥后,所有内容都将使用该密钥在两个方向上进行加密。或多或少与SSL/TLS协议相同(注释2)令牌用公钥加密,用私钥解密(或用上面注释的AES密钥)。我不知道这些库是支持加密还是只支持签名/验证。快速阅读之后,我还没有看到它。如果没有,您可以使用本机webcryptographyapi对自己进行加密/解密