jwt Web 令牌应该加密吗?

问题描述 投票:0回答:5

我正在阅读有关 JWT Web 令牌作为发送给用户的访问令牌的文章。其中一些提到网络令牌应该能够被用户解码。

这是否意味着解密整个网络令牌是不好的做法?例如,假设我返回以下 JWT Web 令牌,可以在其中解码该信息。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

但是,我觉得我不想让用户能够解码他/她的访问令牌,因此我使用另一种加密算法将所有内容加密为另一种形式,如下所示并传回给用户。

因此,当我在服务器中获取访问令牌并对其进行解码时,我会解密这个新文本。

如果我不想向用户公开声明中的一些可用值(例如用户 ID),是否建议这样做?如果没有,有什么替代方案?

encryption asp.net-web-api oauth oauth-2.0 jwt
5个回答
66
投票

JWT (RFC7519) 只是一种通过 HTTP 安全地将声明从发行者传输到受众的紧凑方式。

JWT 可以是:

  • 签署(JWS - RFC7515
  • 加密(JWE - RFC7516
  • 签名然后加密(整个JWS就是JWE的有效负载)
  • 加密然后签名(整个JWE就是JWS的有效负载)

请注意,无论您如何处理令牌,当前的安全最佳实践之一是验证所有加密操作

如果您想对持有者(客户端)或第三方隐藏敏感信息,那么加密 JWS 是有意义的。

真正的问题是:观众支持JWE吗?如果支持,支持哪些算法?


22
投票

JWT 是“签名的”,因此其内容受到保护以防止篡改:您无法更改其内容而不使其无效。

您可以选择“加密”内容,从而使它们仅对发行者(创建令牌的实体)和消费者(在验证后注定要使用其内容的实体)可见。

有一个标准:JWE


8
投票

令牌包含用户数据并充当临时存储。在令牌中存储敏感数据是不好的。

在第一级,您应该存储用户名,也许还有角色或类似的东西。您不应包含密码,因此不需要加密。 不过,如果您愿意,您可以对其进行加密。


2
投票

是的,最佳实践是使用 JSON Web 加密(JWE)RFC,解码后 JWT 中的声明是纯文本形式,因此如果用户丢失令牌,敏感信息如电子邮件、用户名、访问权限可见,可以作为任何攻击的初始信息。


0
投票

JSON Web Token 最佳当前实践RFC 8725 强调了如何从头开始正确构建 JWT 实现,但 IEEE、W3C 或 IETF 等权威机构没有就 是否应该这样做提出建议 加密 JWT 有效负载。

注意:如果您遵循 GoogleBing 的网络建议,那么您就是通过安全传输(例如 HTTPS)进行响应。

关于将有状态信息(例如访问令牌)固定到无状态 HTTP 协议,请参阅 cookie:

限制对 cookie 的访问

只要您正确实现了 JWT,您签署的 JWT

将被认为是铁定的,即,从物理角度来看,伪造返回到服务器的有效负载实际上是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.