由于不活动,MSGraph 无效刷新令牌

MSGraph invalid refresh token due to inactivity

我们正在通过 MSGraph rest api 在我们的应用程序中集成 Office 365 功能,我们目前在验证刷新令牌时遇到问题,这是响应来自服务器的无效请求的错误代码:

"error":"invalid_grant","error_description":"AADSTS70002: Error validating credentials. AADSTS70008: The refresh token has expired due to inactivity.??The token was issued on 2016-04-27T11:44:49.4826901Z and was inactive for 14.00:00:00.

这很烦人,因为我们需要用户在 Microsoft 服务器上再次登录时获取他们的凭据。

是否有任何选项可以避免刷新令牌因不活动而失效?或者延长这个有效期?

这是通用的 OAuth(非特定于 AAD):获取 access 令牌是一个两步过程。第一步是获取需要用户进行身份验证的授权代码。第二步是从授权代码中兑换访问令牌和刷新令牌。第二步是纯程序化的,即用户不需要在场。应用程序可以不断重复第二步,即从 latest refresh token 中兑换一个新的 access token 和 new refresh token 而用户甚至不知道关于它。

您的应用应安排频繁 'refreshes' 的刷新令牌。当应用处于 运行 时,您可以随时执行此操作。

如果用户长时间不使用该应用程序,例如大约 2 周(我相信),刷新令牌自然会过期。如果你想避免这种情况,你必须安排一个专门的工作来刷新令牌。

兹拉特科

刷新令牌的生命周期有限。如果在此之前未请求新令牌(和刷新令牌),它们将过期。一旦发生这种情况,用户必须重新进行身份验证。

如果您需要永久访问帐户,则需要定期手动刷新令牌。您可能想看看 this article。它涵盖了 v2 端点如何工作的基础知识(以及各种令牌生命周期)。

在我的大多数实现中,我使用队列来处理刷新令牌。我将每个令牌排队,每 10 天刷新一次。如果失败,我将重新提交到队列中。如果在第 12 天它仍然失败,我会通过电子邮件通知用户有问题,他们将需要重新进行身份验证。

更新

刷新令牌生命周期最近更改为 until-revoked。您可以阅读有关更改的信息 here