Проверка CompactToken не удалась 80049228

Некоторые пользователи получают эту ошибку обратно при попытке войти с помощью Microsoft Sign In для доступа к почте через MS Graph. У меня были как корпоративные пользователи, так и личные пользователи (Hotmail.com), показывающие этот номер ошибки, но он отлично работает для большинства пользователей.

Это вызов:

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

Это возвращенная ошибка:

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

Есть указатели? Где я могу найти ссылку на этот номер ошибки?

2 ответа

Это означает, что срок действия токена истек, и его необходимо обновить. Если вы хотите обновить его без взаимодействия с пользователем, вам понадобится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 (здесь был взят приведенный выше код)

Нашел решение этого

В моем случае я обновлял токен перед использованием access_token с Microsoft Graph API хотя бы один раз.

Как только вы успешно вызовете , вы получите refresh_token и access_token, я предполагаю, что вы обновили токен перед использованием первого токена доступа из URL-адрес, упомянутый выше .

Шаги по исправлению:

  1. Позвоните https://login.microsoftonline.com/common/oauth2/v2.0/tokenhttps://login.microsoftonline.com/common/oauth2/v2.0/token , как и раньше.
  2. Скопируйте access_token из ответа и используйте его хотя бы один раз с API Microsoft Graph.
  3. Теперь вы можете скопировать refresh_token (или после истечения срока действия access_token) и обменять его на новый токен доступа.
  4. Наслаждайтесь интеграцией API
  5. Улыбка :)

Ссылка:

  1. Документы Microsoft Authentication (токены) — включая токен обновления
  2. Ответ на токен обновления OneDrive
Другие вопросы по тегам