使用访问令牌和刷新令牌来刷新它们
Posted
技术标签:
【中文标题】使用访问令牌和刷新令牌来刷新它们【英文标题】:Using both access and refresh tokens for refreshing them 【发布时间】:2020-06-12 22:17:59 【问题描述】:正在研究如何使用 JWT,但发现对我来说并不明显: 为什么刷新访问令牌不使用访问令牌和刷新令牌,而只使用刷新令牌?
在这种情况下,我们将能够:
-
验证访问令牌签名,即使它已过期。
从负载中获取访问令牌信息,这可能有助于在数据库中查找刷新令牌。
【问题讨论】:
【参考方案1】:您的问题有点不清楚,并且假设了一些可能不正确的事情。访问令牌和刷新令牌都必须是 JWT,并且 JWT 不是特定于 OAuth2(它定义了访问令牌和刷新令牌,但没有说明它们应该如何实现)。
访问令牌和刷新令牌的受众也不同 - 访问令牌被发送到(可能是单独的)资源服务器(如果它们是自包含的,发布授权服务器甚至可能没有保留副本)。刷新令牌被发送到授权服务器。
在数据库中定位任何一种类型的令牌(假设它们不是像 JWT 那样自包含的令牌)永远不会成为问题,因为它们应该是唯一的令牌,它们是数据库表的理想主键。因此,没有理由将过期的访问令牌作为刷新请求的一部分发送。
顺便说一句,欢迎来到 Stack Overflow :)。
【讨论】:
除了这个不错的答案之外,要刷新的访问令牌应该是无效的(已过期),因此发送它是没有意义的。 感谢您的回答!我想,我需要提供更多信息。就我而言,我没有授权服务器,只有一台服务器。一个用户可能有不同的刷新和访问令牌,因为一个用户可能从不同的地方连接到服务器(在我的情况下是不同的移动设备)。当应用程序发现需要刷新访问令牌时,它可能会发送刷新和访问令牌或仅发送刷新令牌,但在这种情况下服务器需要有关设备的信息。访问令牌在payload中有这样的信息,所以我认为发送它们会更好。以上是关于使用访问令牌和刷新令牌来刷新它们的主要内容,如果未能解决你的问题,请参考以下文章