JWT令牌加密和http get中的传输

Posted

技术标签:

【中文标题】JWT令牌加密和http get中的传输【英文标题】:JWT token encryption and transferring in http get 【发布时间】:2015-10-02 23:00:17 【问题描述】:

我想验证一种我们想使用的安全方法。 我们有两个应用程序,我们想使用 jwt 令牌传递数据(从一个 pllication 重定向到另一个 + 在令牌中传递敏感信息)。

为此,我们创建了具有共享密钥的 JWTSigner 并签署了所有声明。

JWTSigner signer = new JWTSigner(secret);
return signer.sign(claims);

根据我的理解,我们需要额外加密此信息,因为签名只会阻止我们篡改此信息。

问题是在 url 中传递这个令牌作为参数是否足够安全?

【问题讨论】:

【参考方案1】:

视情况而定。

如果操作正确,是的,它是安全的——因为只有您的应用程序才能颁发有效令牌。如果做错了,那就一文不值。

如何正确地做(TM):

JWT 中的有效载荷一般不加密;经过base64解码后可以被第三方读取。签署它可以防止篡改,但不能泄露。 JWT 有一个“alg”字段,可用于指定使用的加密算法。是attacker-friendly:不要相信它的内容。 让自己免受重放攻击,例如通过使用和验证请求计数器或时间戳。 使用强加密。公钥加密的优点是允许每个端点验证对方,即使不知道对方的私钥;但对称加密也是一种选择。 保护您的密钥。使用不同的密钥进行测试和部署,切勿将密钥签入源代码管理。

【讨论】:

对“使用强加密”项的澄清。 Id 令牌将使用 http get 传递,唯一的选择是使用对称密钥。我说的对吗? 否 - 可以使用您的 JWT 实现支持的任何算法完成签名,无论您要签署什么声明(ID,...)。可选算法之一是 RSA(公钥),由于您提到 Java,快速搜索显示它受 connect2id.com/products/nimbus-jose-jwt 支持 - 我没有亲自使用过。

以上是关于JWT令牌加密和http get中的传输的主要内容,如果未能解决你的问题,请参考以下文章

# JWT 图解

从 ASP.NET Core 中的不同 HTTP 标头读取 JWT 令牌

在 jwt 令牌中加密 user_name

Angular 4 HTTP GET 不包括用于 HTTP 标头中的授权的 JWT

使用 Http 和 Secure 将 Jwt 令牌存储在 Cookie 中,而不是 Javascript 中的 LocalStorage

如何验证nodejs中的jwt令牌/永不过期?