【问题标题】:Are refresh tokens necessary with reference tokens?引用令牌是否需要刷新令牌?
【发布时间】:2019-12-29 23:29:25
【问题描述】:

我们有一个使用本地 API 身份验证通过 IdentityServer4 保护的 Web API。我们目前同时使用参考令牌和刷新令牌。既然我们有能力随时撤销引用令牌,我们甚至有必要使用刷新令牌吗?我们不能为参考令牌设置一个较长的到期时间吗?这种方法是否存在任何安全隐患?

【问题讨论】:

  • 我不知道这里的“引用”标记是什么意思,你不妨解释一下。一般来说,刷新令牌的目的是避免强制用户重新输入他的凭据以保持会话继续进行。所以,我的猜测是,如果您想要流畅的用户体验,则有必要使用刷新令牌。
  • @TimBiegeleisen Reference token 是 IdentityServer4 功能。
  • 感谢@RuardvanElburg。简而言之,引用令牌不是像 JWT 那样的自包含令牌,也不包含任何声明。您使用参考令牌从身份服务器获取声明。 JWT 通常不能被撤销,因此通常您希望它们短暂存在,并且您将在需要时使用刷新令牌来获取新令牌。 IdentityServer 中的引用令牌可以被撤销,因此我的问题是,我还需要刷新令牌吗?

标签: oauth-2.0 openid identityserver4 openid-connect


【解决方案1】:

来自documentation

使用引用令牌时 - IdentityServer 将存储内容 数据存储中的令牌,并且只会发出唯一标识符 将此令牌返回给客户端。接收此引用的 API 然后必须打开与 IdentityServer 的反向通道通信以 验证令牌。

换句话说,客户端不必向api提供访问令牌,只需传递引用即可。

这是 JWT 令牌和引用令牌之间的一个很大区别。客户端向 API 发送 JWT 令牌,该令牌必须由 API 信任,而无需咨询提供者,而引用令牌则强制 API 联系提供者,而不必依赖客户端。

来自Refresh Tokens documentation

由于访问令牌的生命周期有限,因此刷新令牌允许 无需用户交互即可请求新的访问令牌。

现在的问题是,引用令牌可以过期吗?不是来自自身,因为它不包含任何逻辑,这与 JWT 令牌不同。但可能存在触发某种过期的服务器端设置,或者实际上导致引用被撤销。

无论哪种方式,在这种情况下都没有使用刷新令牌。因为您无法刷新参考令牌。引用令牌存在或不存在(无效或被撤销)。

【讨论】:

  • 我还没有测试过,但我假设客户端上的 AccessTokenLifetime 设置适用于引用令牌和 jwt。
  • 存储的信息可能会过期,但这不是客户端应用程序关心的问题。请注意,参考令牌不必过期,因为它可以被撤销,这与无法撤销的 JWT 不同。此外,客户端无法检查服务器端信息的状态(过期)。它所做的只是将引用令牌连同请求一起发送到资源。
  • 因此,您的问题的答案是否定的:引用令牌不需要刷新令牌,因为您可以撤销令牌而无需设置过期时间。
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 2015-11-10
  • 2017-01-18
  • 1970-01-01
  • 2021-08-26
  • 2019-04-11
  • 2020-07-31
  • 1970-01-01
相关资源
最近更新 更多