为什么客户端需要解密JWE?

Why does the client need to decrypt JWE?

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

客户端将 JWE 令牌附加到所有请求。服务器使用 JWE 令牌识别客户端并响应或拒绝请求。自始至终,只有服务器可以解密。

如果这个结构没有问题,那么最好的实现方式是什么?我应该使用非对称加密而不提供 public 密钥(这在 JWE 规范中可能吗)?

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

此外,还有其他我遗漏的安全问题吗?

If I'm using JWE to send an encrypted JSON message, which will be stored on the client-side, for use with authorization, why would the client need to decrypt this message?

当客户端需要读取JWT中包含的一些数据时,比如用户id或者过期日期。并非所有场景都需要。

Client attaches the JWE token to all requests. Server identifies client using JWE token and responds or denies request.

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

Throughout, only the server can decrypt.

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

If there's no problem with this structure, what's the best way to implement it? Should I use asymmetric encryption and not provide a public key (is this possible within the JWE spec)?

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

Along these lines, what's the best way to ensure the JWE token hasn't been intercepted and, though not decrypted, attached to a malicious server request, effectively allowing an attacker to impersonate the client?

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

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

  • 将其安全地存储在客户端上。