【发布时间】:2016-11-17 03:45:00
【问题描述】:
有一个 REST API 服务正在开发中,它为发出请求的用户提供了对内部 SQL 数据库的不同搜索方法。 数据库包含几张表,每张表都有user_id列,即User表中id列的引用键(唯一整数,主键)。这很重要。
当用户从客户端应用程序登录时,他会获得 JWT 令牌,其中包含带有用户 ID 值的“子”部分。 然后当用户调用其中一种 API 方法时,他只提供 JWT 令牌,因此 API 从“子”获取用户 ID,并向相应的表发出搜索请求。 因为每个表都有user_id列,SQL查询中不需要对User表进行join(如果我们不需要响应中的用户信息)。
问题在于,公开内部用户 ID 是一种不好的做法,可能会导致安全/业务问题。 所以我正在寻找隐藏它。现在我看到以下选项:
将用户 ID 更改为字符串列(使用顺序 GUID),但这对我们的系统来说是一个巨大的突破性变化
具有附加 ext_user_id 列 (GUID) 的现存用户表,并在 JWT 令牌中使用此值。缺点是之后每个 SQL 查询都会“加入”到 User 表以获取用户 id 值。
保持数据库不变,但使用 JWE 令牌而不是 JWT。缺点是每次API请求都会做token解密,可能会影响性能。
也许还有其他选择?还是其中一种方法比其他方法更具优势(实际上除了第一种)?
【问题讨论】:
标签: database rest security jwt