gpt4 book ai didi

database - 从 JWT token 中隐藏内部用户 ID

转载 作者:行者123 更新时间:2023-12-05 03:10:53 29 4
gpt4 key购买 nike

有一个正在开发中的 REST API 服务,它通过内部 SQL 数据库为发出请求的用户提供不同的搜索方法。数据库包含几个表,每个表都有一个user_id列,它是User表中id列的引用键(唯一整数,主键)。这很重要。

当用户从客户端应用程序登录时,他会获得 JWT token ,其中包含带有用户 ID 值的“子”部分。然后,当用户调用其中一个 API 方法时,他只提供 JWT token ,因此 API 从“sub”获取用户 ID 并向适当的表发出搜索请求。因为每个表都有一个 user_id 列,所以不需要在 SQL 查询中对 User 表进行连接(如果我们不需要响应中的用户信息)。

问题是公开内部用户 ID 是一种不好的做法,可能会导致安全/业务问题。所以我正在考虑隐藏它。现在我看到以下选项:

  • 将用户 ID 更改为字符串列(使用顺序 GUID),但这对我们的系统来说是一个巨大的突破性更改

  • 带有附加 ext_user_id 列 (GUID) 的现存用户表,并在 JWT token 中使用此值。缺点是之后每次SQL查询都会“join”到User表中获取用户id值。

  • 保持数据库不变,但使用 JWE token 而不是 JWT。缺点是每次API请求都会做token解密,可能会影响性能。

也许还有其他选择?还是这些方法中的一种比其他方法更有优势(实际上除了第一种)?

最佳答案

基本上我认为这些就是您的选择。

您专注于性能。对于解决方案 2 和 3,您必须比较SQL 查询/连接的开销 以获取用户 ID 与JWE 解密 token 。

JWE 解密时间将始终基本相同,使用对称 key 可能需要几毫秒的处理器时间。但是,数据库查询需要磁盘访问并取决于其他因素:记录数、连接数、磁盘访问时间等。在不详细了解问题的情况下不可能给您绝对的衡量标准。我建议你根据经验衡量每个案例的开销,并评估它是否对你来说是个问题

除了性能之外,我建议通过隐藏 ID 来评估附带问题:

您是否需要客户端知道您的 REST API 中的 ID?

例如,如果您有一个资源使用这样的 ID

/user/{userId}/getSomeData

JWE 不会有用,因为你需要以任何方式提供标识符

您是否需要客户端解码 JWT?

如果使用JWE,客户端无法解码,因为没有解密 key

您的服务器中有多少地方需要将 GUID 转换为 ID?

您将需要对每个查询进行查询,或者在入口点的过滤器中进行一般转换查询

关于database - 从 JWT token 中隐藏内部用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38370567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com