什么是刷新令牌,我们可以控制刷新 AADB2C 中的 ID 和访问令牌吗?

Posted

技术标签:

【中文标题】什么是刷新令牌,我们可以控制刷新 AADB2C 中的 ID 和访问令牌吗?【英文标题】:What is refresh token and can we control refreshing the ID and Access token in AADB2C? 【发布时间】:2021-08-08 05:04:11 【问题描述】:

我的团队正在为我们客户的移动应用程序实施或配置 B2C 登录。我们将配置设置到用户可以登录到应用程序一次并且令牌缓存在 MSAL 中的程度。下次以后,用户可以直接登录而无需输入他/她的凭据。我们遵循here 描述的模式

我们的代码首先尝试使用AcquireTokenSilent 检索令牌,如果该令牌不在MSAL 缓存中,则我们使用AcquireTokenInteractive 检索它。

我试图了解如何刷新 ID 和访问令牌,并在 MS 文档 here 上找到关于令牌的内容

刷新令牌用于获取新的 ID 令牌和访问令牌 OAuth 2.0 流程。它们为您的应用程序提供代表用户对资源的长期访问权限,而无需与这些用户交互...

这里也提到了,当我们兑换刷新令牌来获取新的ID和访问令牌时,我们也得到了一个新的刷新令牌来替换之前的刷新令牌。

现在我尝试注销并在 1 小时或更长时间后重新登录我的移动应用程序,但我仍然能够登录。当我检查声明时,ID 和访问令牌的到期时间被刷新到下一个 1 小时的登录时间。

我的问题是:

    由于 ID 令牌和访问令牌的默认有效期为 1 小时,那么即使我退出了一个多小时,我的令牌也刷新了,并且我能够在不输入用户凭据的情况下登录。 如果这是因为刷新令牌会在 ID 和访问令牌接近到期时自动刷新,那么此过程是否会一直持续到刷新令牌自己到期为止。 MS 文档还提到,当 ID 和 Access 令牌过期后重新生成时,我们还会获得一个新的刷新令牌。如果是这种情况,那么刷新令牌将永远不会过期,因为新令牌将始终具有新的过期时间。 有没有办法控制刷新令牌,以便我们可以控制何时刷新 ID 和访问令牌。

如果我错过了什么,我很抱歉,但我对刷新令牌的工作原理有点困惑,有没有办法控制何时刷新令牌,何时不刷新。

提前致谢。

【问题讨论】:

如果你想配置token生命周期可以查看这篇文章:docs.microsoft.com/en-us/azure/active-directory-b2c/… 是的,id token 和 access token 的默认值为 60 分钟,但 refresh token 的默认值为 14 天。 【参考方案1】:

是的,刷新令牌用于获取新的id令牌和访问令牌,即使id令牌和访问令牌都过期了,只要刷新令牌没有过期,就可以使用刷新令牌获取新的id令牌和访问令牌,同时会生成一个新的刷新令牌,如果要配置令牌生命周期,可以在门户中进行。

参考 - https://docs.microsoft.com/en-us/azure/active-directory-b2c/configure-tokens?pivots=b2c-user-flow

【讨论】:

以上是关于什么是刷新令牌,我们可以控制刷新 AADB2C 中的 ID 和访问令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2中刷新令牌有啥好处[重复]

为啥刷新令牌更安全?如果刷新令牌也可能被盗,为啥我们还要使用它?

节点刷新令牌为啥不在后端刷新

使用访问令牌和刷新令牌来刷新它们

为啥我们甚至需要通过 HTTPS 刷新令牌?

Laravel 护照创建令牌和刷新令牌