当前位置: 首页 > 知识库问答 >
问题:

JSON web令牌-有效负载中的密码?

陆高峰
2023-03-14

如果我创建一个JWT令牌,有效负载中应该有哪些数据?我在网上查找了一些示例和解释,有些人将密码放在JWT中,有些人没有。

现在我正在传递以下数据:

{ 
  id: 57,
  username: 'test',
  email: 'test@test.nl',
  password: '[HASHED PASSWORD]',
  iat: 1529992818 
}

将散列密码放入JWT有效负载感觉不对,因为JWT将被放置在前端应用程序中。它应该在那里吗?

最佳实践是什么?

共有2个答案

姜德容
2023-03-14

通常,我会说不,不要将密码放入令牌中!

如果你这样做了,那么只有在它确实有目的的情况下才做,这意味着如果你真的要在后端/中间件中检查它,例如在al3xand3r96的答案中描述的场景中。但也必须考虑性能。

对于正常的用例来说,这是不需要的,您不应该仅仅因为其他人也这样做就把密码或任何东西放入有效载荷中。

RFC7519第4节列出了一些强制性声明和一些可选声明,密码不在其中,我不知道有什么框架会需要密码。

对于您的目的,哪些声明是有用的或需要的在这里无法回答,还取决于授权框架/中间件/服务器。通常,避免敏感信息,并使令牌尽可能短。

关于你的例子,除了密码,这样就ok了。但是只有在真正需要时才把额外的信息放入令牌中。

慎峻
2023-03-14

存储密码实际上有一些用处,但需要一些想象力。

假设攻击者获得了私钥(用于签署JWT),但没有获得散列密码,这是一种可能的(尽管不太可能)情况,因为它们可能不是以相同的方式/位置存储的。如果您只在JWT中包含用户名(和其他可预测的数据),那么黑客现在将能够模拟任何他知道用户名的用户,因为他可以修改json web令牌中的用户名并自己创建有效的签名。

然而,如果您包括密码散列(显然,每当用户执行一些访问控制保护的动作时,检查它的正确性),我们的攻击者将无法模拟用户...嗯,除非他成为一个更好的黑客,还能得到密码哈希。

我承认,做这样的事情会导致一些开销(因为你在许多地方验证哈希)甚至可能出现性能问题,但在安全关键应用程序中,它可能值得考虑。我个人不这样做,你可能也不需要这样做,特别是如果你的应用程序的其他部分(看起来?)是安全的,但告诉其他人这样做没有目的只是短视的。

 类似资料:
  • 我使API服务器与Node.js和快递。 我还为auth用户使用了JWT令牌身份验证。 如果令牌过期,我的场景就在这里。 > ,因为它不会检查签名是否正确。 对于提取过期令牌的有效负载,有什么解决方案吗? 谢谢。

  • 我想用当前的方法加密JWT负载,比如对称或非对称加密方法。我的问题是,如果我使用这些方法,javascript需要在客户端对我的数据执行任何操作?还是加密和验证的所有部分都将在服务器端完成?在本文中,他们说,如果需要加密负载,则必须存储公钥(由于RSA或…)等加密算法的缘故)。为什么?如果我需要加密有效负载,为什么我们需要在jwt令牌中存储公钥(或任何密钥)?有没有办法只在服务器端对称加密有效负载

  • 我在Spring Boot中创建了一个JWT令牌,用于存储用户详细信息。当我使用Jwttokenutil时。getUsernameFromToken(authToken)[authToken是传递的令牌]方法我将数据集获取给Subject。类似地,我希望将包含其他用户详细信息的数据集获取到Payload。但是我不能得到它。 ======下面是我的令牌生成方法/代码:======== =======

  • 我正在尝试在API网关(Apache APISIX)后面使用KeyClope。 我使用minikube来运行KeyClope和API网关。 网关正常工作,KeyClope也正常工作: 使用KeyClope,我可以使用不同的endpoint(使用发现endpoint(http://127.0.0.1:7070/auth/realms/myrealm/.well-已知/uma2配置),询问访问令牌并进

  • 我写的是MVC5,使用的是Identity 2.0。 我在邮件中点击链接,我正在获得密码重置令牌并使用 结果总是false,并表示“无效令牌”。我该在哪里修?

  • 我有一个spring boot应用程序,提供restful api。 我想确保某些字段在尽可能早的时间被屏蔽/加密,以便它们不会以明文形式显示在应用程序日志中。。。通过logback。 是否有一个切入点/过滤器/冲刺方面,我可以实现,以便实现这一点?