为什么刷新令牌应保存在服务器端?

时间:2019-07-25 14:28:14

标签: oauth jwt refresh-token

我了解访问令牌通常不会保存在服务器端,而只是使用某种算法的密钥进行了验证。但是,似乎正常的行为是将刷新令牌保存在服务器端(即数据库)中,并在用户尝试刷新其访问令牌时将其与用户进行比较。我的问题是,为什么不只是以验证访问令牌的方式验证刷新令牌?

1 个答案:

答案 0 :(得分:1)

如果令牌是针对数据库验证的ID,通常会更安全,因为这允许令牌随时被撤销(通过将其从数据库中删除或将其标记为无效)。

诸如JWT之类的自验证令牌无法撤消(不使用数据库,这会抵消使用自验证令牌的大多数好处)-它们只能过期。因此,它们应该具有较短的到期时间。自验证令牌的好处不仅在于性能,还在于消除了依赖性,因为资源服务器不需要连接到授权服务器拥有的数据库。取而代之的是,它可以使用受信任的公钥简单地自行验证令牌。

使用数据库也更容易实现,因为大多数Web应用程序已经拥有一个数据库,并且自验证令牌很容易出错(那里有很多JWT库存在缺陷或默认错误)。

刷新令牌仅用于请求新的访问令牌,因此性能并不重要。该请求将发送到授权服务器,该服务器“拥有”任何与授权相关的数据库,因此它不会添加任何不需要的依赖项。

请注意,访问令牌不必是自验证令牌。如果它们也只是针对数据库验证的ID,那就很好了。访问令牌和刷新令牌之间的分隔仅使使用自验证访问令牌选择实现成为可能。