据我了解,Box OAuth2 实现使用可选的刷新令牌轮换方案,每次发出访问令牌时,也会发出一个新的刷新令牌。请参阅oauth 规范文档的第 10.4 节。这是一项可选功能,Google 和 Microsoft 不使用该功能,因为它们为 OAuth2 实现发布永久刷新令牌(或者至少刷新具有足够长生命周期的令牌,所以它不是真正的问题)。
在我看来,这是 Box 的一个非常不幸的选择。
您在应用程序中要做的是,每次请求新的访问令牌时,您还必须保存返回的新刷新令牌,以便下次请求访问令牌时使用新的刷新令牌。这样一来,您最终会得到一个过期的刷新令牌的唯一情况是,如果用户 60 天没有使用他们的 Box 登录。只要他们积极使用该应用程序,您就会获得新的刷新令牌,并且 60 天的生命周期不是问题。到目前为止一切都很好,但这并不总是如此,现在是吗?
我的问题是,您必须在每个请求上保存刷新令牌,但是如果由于某种原因失败了怎么办:网络中断,电池电量不足,磁盘写入异常,您的应用程序被关闭操作系统....那么您将不得不要求用户再次登录,而用户将责怪应用程序开发人员。
如果您有足够的用户使用您的应用程序,这将会发生。随着时间的推移,可能只有 2-5%,但在我看来这仍然是一个大问题。
至少如果刷新令牌是(半)永久的,您可以重试身份验证过程,直到它完成。然后你知道你已经保存了令牌,当上述情况发生时,你可以继续使用它,也可以重试,但轮换方案并非如此。
我已经在考虑为遇到此问题的用户制作标准支持电子邮件,并链接到此问题。