oauth2.0 是否应该加密jwt web令牌?

roqulrg3  于 2022-12-17  发布在  其他
关注(0)|答案(4)|浏览(139)

我阅读了一篇关于JWT Web令牌作为访问令牌响应用户的文章,其中一些提到Web令牌应该能够被用户解码。
这是否意味着解密整个Web令牌不是一个好的实践?例如,我假设将以下JWT Web令牌返回给用户,在那里可以解码这段信息。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

然而,我觉得我不想让用户能够解码他/她的访问令牌,所以我使用另一种加密算法将所有内容加密成另一种形式,如下所示,并传递回用户。
所以,当我在服务器中得到这个访问令牌并解码它时,我会解密这个新文本。
如果我不想向用户公开claim中的一些可用值(如用户id),是否建议这样做?如果不建议,有什么替代方案?

z9smfwbn

z9smfwbn1#

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

  • 带符号(JWS -RFC7515
  • 加密(JWE -RFC7516
  • 先签名再加密(强烈推荐此顺序)。整个JWS是JWE的有效负载
  • 加密然后签名。

如果您希望对承载者(客户端)或第三方隐藏敏感信息,那么加密JWS是有意义的。
真实的的问题是:受众是否支持JWE?2如果是,支持哪些算法?

jdgnovmf

jdgnovmf2#

JWT经过“签名”,因此其内容不会被篡改:你不能改变它的内容而不使它们无效。
您可以选择对内容进行“加密”,从而使其仅对颁发者(创建令牌的实体)和使用者(验证后将使用其内容的实体)可见。
这是有标准的JWE

klsxnrf1

klsxnrf13#

令牌包含用户数据,其作用类似于临时存储。在令牌中存储敏感数据是不好的。
在第一层,你应该存储用户名和角色或类似的东西。你不应该包括密码,所以它不需要加密。但是,如果你想的话,你可以加密它。

dzhpxtsq

dzhpxtsq4#

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

相关问题