Проверка 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-адрес, упомянутый выше .
Шаги по исправлению:
- Позвоните https://login.microsoftonline.com/common/oauth2/v2.0/tokenhttps://login.microsoftonline.com/common/oauth2/v2.0/token , как и раньше.
- Скопируйте access_token из ответа и используйте его хотя бы один раз с API Microsoft Graph.
- Теперь вы можете скопировать refresh_token (или после истечения срока действия access_token) и обменять его на новый токен доступа.
- Наслаждайтесь интеграцией API
- Улыбка :)