jwt web令牌应该加密吗?

vin*_*sty 17 encryption oauth oauth-2.0 jwt asp.net-web-api

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

这是否意味着解密整个Web令牌不是一个好习惯?例如,我想将以下JWT Web令牌返回给用户,在这里可以解码这条信息.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)

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

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

如果我不希望向用户公开声明中的某些可用值(例如用户ID),是否建议以这种方式执行此操作?如果没有,有哪些替代方案?

Flo*_*lli 21

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

JWT可以是:

如果要保护敏感信息对承载(客户端)或第三方隐藏,则加密JWS是有意义的.

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

  • 你是对的:即使不推荐,这个命令也不被禁止。我相应地更新了答案。 (3认同)
  • 第三点不正确:建议先签名然后加密,但先加密然后签名也是可能的。请参阅 https://tools.ietf.org/html/rfc7519#section-11.2 (2认同)

A P*_*mer 8

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

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


Eug*_*ace 5

JWT是“已签名”的,因此可以保护其内容免遭篡改:您不能在不使它们无效的情况下更改其内容。

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

有一个标准:JWE

  • 我认为这里的标注(对于其他阅读此文档的访问者来说很清楚)是,通过JWT的签名保护了JWT免受“篡改”,但是任何持有它的人仍然可以看到有效负载。如果该有效负载中包含敏感数据,则对其进行加密可能是一个好主意。挑战在于,您需要确保接收令牌的任何系统都可以在需要读取有效负载的情况下解密该令牌(例如,声明) (2认同)