【发布时间】:2019-06-13 11:08:13
【问题描述】:
我正在构建一个带有 node.js 后端并结合 MySQL 的应用程序。在数据库中,我有一个表“用户”,其中包含有关用户的信息。目前,那些具有带有主键的常规 ID - 所以我的用户 ID 是 0、1、2、3,...
我现在面临的问题是我使用 JSON Web Token 对用户进行身份验证并将 userID 存储在有效负载中。例如,我的有效载荷如下所示:
userID: 173
userName: PennyWise
userLevel: user
我现在想知道是否应该将我的用户 ID 更改为 UUID。我读到这可能会减慢插入速度,但这只会在新用户注册时发生,所以我认为这不是什么大问题(它不像一个充满帖子的表格,上面有 100 个插入每天)。
我之所以要这样做,是因为如果 JWT 被泄露并且签署它的秘密也被泄露,数据可能会被破坏,只需将用户 ID 更改为,比如 122,然后是那个用户将有权访问用户 ID 122 而不是 173 的所有数据。
我并不是说它会发生 - 我使用有效期为 21 天的令牌(移动应用程序)并检查发行日期是否早于 3 小时来刷新它(使用刷新令牌),然后对照数据库以查看它是否仍然相同 - 当更改需要原始密码的密码时,此刷新令牌会自动更改。但我想我会更有信心,如果 ID 不是那么“明显”可读。
对此有什么想法或建议吗?坚持使用常规 ID(0、1、2、3)还是针对这种特定情况更改为 UUID 并将其存储在 JWT 中?
干杯!
【问题讨论】:
-
1.无论如何,您可能在某处暴露了您的用户 ID,因此无需猜测即可获得有效的用户 ID。 2. 如果您的秘密被泄露,无论哪种方式,您都会遇到一大堆问题。 3. 当你发现它被泄露时,你可以轮换你的秘密。
标签: mysql json security jwt uuid