Encryption jwt web令牌应该加密吗?

Encryption jwt web令牌应该加密吗?,encryption,asp.net-web-api,oauth,oauth-2.0,jwt,Encryption,Asp.net Web Api,Oauth,Oauth 2.0,Jwt,我正在阅读关于JWTWebToken的文章,它是作为对用户的响应的访问令牌。其中一些提到web令牌应该能够被用户解码 这是否意味着解密整个web令牌不是一个好的做法?例如,我假设将以下JWT web令牌返回给用户,在这里可以解码这段信息 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDc

我正在阅读关于JWTWebToken的文章,它是作为对用户的响应的访问令牌。其中一些提到web令牌应该能够被用户解码

这是否意味着解密整个web令牌不是一个好的做法?例如,我假设将以下JWT web令牌返回给用户,在这里可以解码这段信息

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
然而,我觉得我不想让用户能够解码他/她的访问令牌,所以我使用另一种加密算法将所有内容加密为另一种形式,如下所示并传递回用户

所以,当我在服务器中获取这个访问令牌并解码它时,我会解密这个新文本

如果我不想向用户公开索赔中的某些可用值(如用户id),是否建议这样做?如果没有,还有哪些替代方案?

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

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

这方面有一个标准:

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

JWT可以是:

  • 签署(JWS-)
  • 加密(JWE-)
  • 签名然后加密()。整个JWS是JWE的有效载荷
  • 加密然后签名
如果您希望对承载者(客户端)或第三方隐藏敏感信息,那么加密JWS是有意义的


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

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

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

简单地说,对整个JWT进行加密以使消费者现在完全了解内容是错误的?我在这里的意思是用自己的算法再次加密整个jwt令牌,而不是选择性地加密内容。这没有错。这可能并不总是必要的。通常情况下,如果信息是敏感的,则需要这样做。但情况并非总是如此。我会坚持标准。我认为这里的标注,对于阅读本文的其他访问者来说是非常清楚的,就是JWT通过其签名受到保护,不会被篡改,但有效载荷对任何人都是可见的。如果您的负载中有敏感数据,那么加密它可能是一个好主意。挑战在于,如果需要读取有效负载(如声明),您需要确保接收该令牌的任何系统都可以解密该令牌。第三个项目符号不正确:建议先签名再加密,但也可以先加密再签名。看你是对的:即使不推荐,这个命令也不是禁止的。我相应地更新了答案。如果没有加密(只是签名),这不是一个安全漏洞吗?有了足够多的这样的令牌,散列不会因为大量尝试失败而最终受损吗?