9

一些用户在尝试使用 Microsoft 登录以通过 MS Graph 访问邮件时收到此错误。我已经让企业用户和个人 (Hotmail.com) 用户都显示了这个错误号,但它对大多数用户来说都很好。

这是电话:

https://login.microsoftonline.com/common/oauth2/v2.0/token

这是返回的错误:

Code: InvalidAuthenticationToken
Message: CompactToken validation failed with reason code: 80049228

任何指针?在哪里可以找到此错误号的参考?

4

2 回答 2

1

这意味着令牌已过期,需要刷新。如果您想在没有用户交互的情况下刷新它,则需要在refresh_token最初获取令牌时返回一个。

以下是刷新它的方法:

function refreshTokenIfNeeded(tokenObj){
    let accessToken = oauth2.accessToken.create(tokenObj);

    const EXPIRATION_WINDOW_IN_SECONDS = 300;

    const { token } = accessToken;
    const expirationTimeInSeconds = token.expires_at.getTime() / 1000;
    const expirationWindowStart = expirationTimeInSeconds - EXPIRATION_WINDOW_IN_SECONDS;

    const nowInSeconds = (new Date()).getTime() / 1000;
    const shouldRefresh = nowInSeconds >= expirationWindowStart;


    let promise = Promise.resolve(accessToken)
    if (shouldRefresh) {
        console.log("outlook365: token expired, refreshing...")
        promise = accessToken.refresh()
    }
    return promise
}

tokenObj您存储在数据库中的令牌对象在哪里。确保它也有expires_at或将以其他方式oauth2.accessToken.create()创建它并从当前时刻开始计算。

更多细节可以在本教程这个 github repo中找到(这是上面代码的来源)

于 2020-01-21T21:50:57.917 回答
0

找到了解决方案

就我而言,我在将access_tokenMicrosoft Graph API一起使用之前刷新了令牌,甚至一次。

一旦你成功调用https://login.microsoftonline.com/common/oauth2/v2.0/token你会得到一个refresh_token和一个 access_token,我猜你在使用第一个访问令牌之前一直在刷新令牌上面提到的网址

修复步骤:

  1. 像以前一样调用https://login.microsoftonline.com/common/oauth2/v2.0/token
  2. 从响应中复制 access_token 并将其与 Microsoft Graph API 一起使用至少一次
  3. 现在您可以复制 refresh_token(或者一旦 access_token 过期)并换取新的访问令牌
  4. 享受您的 API 集成
  5. 微笑 :)

参考:

  1. Microsoft 身份验证(令牌)文档 - 包括刷新令牌
  2. OneDrive 刷新令牌答案
于 2022-01-16T21:28:35.460 回答