Facebook OAuthException: токен доступа не может быть расшифрован
У меня есть запущенное приложение, которое выполняет запланированные настенные сообщения одному из своих друзей от имени пользователя.
В течение некоторого времени приложение работало нормально, но в последнее время тихие некоторые пользователи сообщают о сообщениях, которые не отправляются.
В журналах отображается
OAuthException: The access token could not be decrypted.
Даже если пользователь пересматривает приложение и сбрасывает свой токен доступа, исключение сохраняется.
Каким может быть корень ошибки и способы ее работы?
Ответы
Ответ 1
Если при выполнении HTTP-запросов к API Facebook появляется следующее сообщение об ошибке:
{
"error": {
"message": "The access token could not be decrypted",
"type": "OAuthException",
"code": 190
}
}
это означает, что токен доступа, который вы отправляете в Facebook, когда вы делаете HTTP-запрос НЕдействителен.
Если вы посмотрите на заголовки заголовков HTTP, вы увидите такое поле:
WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "The access token could not be decrypted"
Я получил ошибку выше, потому что я отправлял токен доступа, который был на 1 символ короче, чем тот, который был действительным.
После сравнения токена доступа с тем, который я отправлял, я обнаружил эту ошибку.
Вы можете проверить достоверность токена доступа OAuth 2.0 (токена-носителя), используемого на Facebook, с помощью Отклик тонера доступа.
Ответ 2
Знаки Facebook увеличиваются в размере и не ограничиваются 255 символами, поэтому способ их хранения может привести к исключению, если вы используете переменную или поле базы данных с ограниченными размерами.
Это указано в последнем разделе этого документа Facebook: https://developers.facebook.com/docs/facebook-login/access-tokens
Размеры
Ожидайте, что размер всех типов токенов доступа со временем изменится, поскольку Facebook вносит изменения в то, что хранится в них и как они закодированы. Вы можете ожидать, что со временем они будут расти и сокращаться. Пожалуйста, используйте тип данных переменной длины без определенного максимального размера для хранения токенов доступа.
Например, чтобы хранить токены в SQL, вы можете избежать использования VARCHAR и вместо этого использовать TEXT или BLOB
Ответ 3
Это может быть связано с отделкой токена перед сохранением в базе данных. или размер поля меньше, чем размер чартера токенов. проверьте один раз в таблице {variable} для правильного и полного токена.
Ответ 4
В моем случае это было вызвано тем, что accessToken не содержит идентификатор пользователя, когда я сделал запрос на "я" (который, я полагаю, пытается определить идентификатор пользователя из токена).
Отклика маркера:
App ID:
<ID> : <app>
User ID: Unknown
Issued: Unknown
Expires: 1339171200 (in about an hour)
Valid: True
Origin: Web
Scopes:
Чтобы исправить проблему, вместо запроса "я", я запросил профиль для идентификатора пользователя, к которому у меня был доступ непосредственно из authResponse.
Ответ 5
Эта ошибка часто возникает, когда длина токена доступа неверна. Проверьте формат токена.