【问题标题】:Why does the client need to decrypt JWE?为什么客户端需要解密JWE?
【发布时间】:2017-12-23 14:34:04
【问题描述】:

如果我使用 JWE 发送加密的 JSON 消息,该消息将存储在客户端以供授权使用,为什么客户端需要解密此消息?

客户端将 JWE 令牌附加到所有请求。服务器使用 JWE 令牌识别客户端并响应或拒绝请求。在整个过程中,只有服务器可以解密。

如果这个结构没有问题,实现它的最佳方法是什么?我是否应该使用非对称加密而不提供公钥(这在 JWE 规范中是否可行)?

按照这些思路,确保 JWE 令牌没有被截获并且(虽然没有解密)附加到恶意服务器请求的最佳方法是什么,从而有效地允许攻击者冒充客户端?

另外,我还遗漏了其他安全问题吗?

【问题讨论】:

  • 为确保消息未被拦截,请使用 HTTPS 并锁定证书,

标签: jwt jwe jose


【解决方案1】:

如果我使用 JWE 发送加密的 JSON 消息,该消息将存储在客户端以供授权使用,为什么客户端需要解密此消息?

当客户端需要读取 JWT 中包含的一些数据时,例如用户 id 或过期日期。并非所有情况都需要这样做。

客户端将 JWE 令牌附加到所有请求。服务器使用 JWE 令牌识别客户端并响应或拒绝请求。

是的,这是通常的授权流程

自始至终,只有服务器可以解密。

不一定。服务器可以使用例如 RSAES-OAEP 使用接收者的公钥来加密 加密密钥。然后接收者将能够使用他的私钥解密 JWT

如果这个结构没有问题,实现它的最佳方法是什么?我是否应该使用非对称加密而不提供公钥(这在 JWE 规范中是否可行)?

这取决于您的要求。如果您希望客户端可以解密 JWT,您需要提供密钥或使用非对称加密并将消息加密给收件人

按照这些思路,确保 JWE 令牌没有被截获并且(虽然没有解密)附加到恶意服务器请求的最佳方法是什么,从而有效地允许攻击者冒充客户端?

拥有 JWT 是身份验证的证明。如果令牌被盗,则攻击者可以冒充用户。所以你需要保护它以降低风险:

  • 主要使用HTTPS加密通信通道

  • 安全存储在客户端上。

【讨论】:

  • 为了防止中间人攻击,还需要固定服务器证书。
  • 或者,听起来 pedrofb 建议我将其安全地存储在客户端并使用 HTTPS - 以防止攻击。如果攻击者以某种方式获得了 JWE 令牌,那么他们就获得了访问权限。然而,至少在这种情况下,他们无权访问 JWE 令牌的内容,这也是我最初选择 JWE 而不是 JWS 的原因。
  • 我试着解释一下。 JWT 可以进行数字签名 (JWS) 和/或加密 (JWE)。为避免 JWT 劫持,您应该使用加密的 SSL/TLS 通道。请注意,如果攻击者获得令牌,他可以使用它进行身份验证,即使令牌已加密。 SSL 客户端必须验证服务器的身份以防止 MITM。这是通过检查服务器证书的颁发者是否存在于客户端信任库中来完成的。证书固定是 SSL 连接上的技术,它直接将服务器证书包含在客户端信任库中,而不是根 CA。这避免了 MITM
  • 感谢您的帮助 pedrofb。我应该早点谢谢你哈哈。
  • 总结:您应该始终使用 HTTPS 并检查服务器证书。仅当您需要向客户端隐藏信息时加密 JWT,或者您想使用 JWT ro 交换数据安全地加密数据给收件人(不适用于您描述的授权上下文)
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 2017-06-02
  • 2018-11-28
  • 2019-04-29
  • 2011-08-20
  • 2019-10-18
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多