JWT token加密并在http get中传输
JWT token encryption and transferring in http get
我想验证我们想要使用的一种安全方法。
我们有两个应用程序,我们想使用 jwt 令牌传递数据(从一个应用程序重定向到另一个应用程序 + 在令牌中传递敏感信息)。
为此,我们创建了具有共享密钥的 JWTSigner 并签署了所有声明。
JWTSigner signer = new JWTSigner(secret);
return signer.sign(claims);
根据我的理解,最好我们需要额外加密此信息,因为签名只能防止我们篡改此信息。
问题是在 url 中将此令牌作为参数传递是否足够安全?
视情况而定。
如果操作正确,是的,它是安全的——因为只有您的应用程序才能颁发有效令牌。做错了就一文不值
正确的做法 (TM):
- JWT 中的负载通常不加密; base64解码后可以被第三方读取。签名可以防止篡改,但不能泄露。
- JWT 有一个 "alg" 字段,可用于指定所使用的加密算法。它是attacker-friendly:不要相信它的内容。
- 使自己免受重放攻击,例如通过使用和验证请求计数器或时间戳。
- 使用强加密。 Public-key 加密的优点是允许每个端点验证对方,即使不知道对方的私钥;但对称加密也是一种选择。
- 保护您的密钥。使用不同的密钥进行测试和部署,永远不要将密钥签入源代码管理。
我想验证我们想要使用的一种安全方法。 我们有两个应用程序,我们想使用 jwt 令牌传递数据(从一个应用程序重定向到另一个应用程序 + 在令牌中传递敏感信息)。
为此,我们创建了具有共享密钥的 JWTSigner 并签署了所有声明。
JWTSigner signer = new JWTSigner(secret);
return signer.sign(claims);
根据我的理解,最好我们需要额外加密此信息,因为签名只能防止我们篡改此信息。
问题是在 url 中将此令牌作为参数传递是否足够安全?
视情况而定。
如果操作正确,是的,它是安全的——因为只有您的应用程序才能颁发有效令牌。做错了就一文不值
正确的做法 (TM):
- JWT 中的负载通常不加密; base64解码后可以被第三方读取。签名可以防止篡改,但不能泄露。
- JWT 有一个 "alg" 字段,可用于指定所使用的加密算法。它是attacker-friendly:不要相信它的内容。
- 使自己免受重放攻击,例如通过使用和验证请求计数器或时间戳。
- 使用强加密。 Public-key 加密的优点是允许每个端点验证对方,即使不知道对方的私钥;但对称加密也是一种选择。
- 保护您的密钥。使用不同的密钥进行测试和部署,永远不要将密钥签入源代码管理。