Intereting Posts
Как создать страницу 404 на сервере WAMP При использовании уникальной буквенно-цифровой строки для короткого URL-адреса лучше ли хранить созданную строку в базе данных или кодировать / декодировать «на лету»? добавление css и js-файла в laravel 5.3 Захват и загрузка веб-камеры Javascript на сервер с помощью PHP Внедрение системы голосования без регистрации В чем преимущества использования SPL ArrayObject, ArrayIterator, RecursiveArrayIterator вместо обычных массивов? Возврат ссылки на переменную сеанса из функции eval () в PHP CodeIgniter Tank Auth PHP Сравнение двух многомерных массивов по ключу и значению Как использовать OAuth с PHP и cURL? Как создать динамические / дружественные URL-адреса с помощью PHP? Как это называется, когда вы можете заполнить строку с помощью <<< и end-delimiter? Как генерировать выдержку с большинством искомых слов в PHP? Результат формы на той же странице Как защитить / закодировать Javascript POST-запросы

Facebook OAuthException: токен доступа не может быть расшифрован

У меня есть запущенное приложение, которое делает запланированные настенные сообщения одному из своих друзей от имени пользователя.

Приложение работало отлично в течение довольно долгого времени, но в последнее время тихо, некоторые из пользователей сообщили сообщения, которые не были отправлены.

Журналы показывают

OAuthException: The access token could not be decrypted. 

Даже если пользователь пересматривает приложение и сбрасывает токен доступа, это исключение сохраняется.

Каким может быть корень ошибки и способы ее работы?

Если при выполнении 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, с помощью Отклика Token Access .

Знаки Facebook увеличиваются в размере и не ограничиваются 255 символами, поэтому способ их хранения может привести к исключению, если вы используете переменную или поле базы данных с ограниченными размерами.

Это указано в последнем разделе этого документа Facebook: https://developers.facebook.com/docs/facebook-login/access-tokens

Размеры

Ожидайте, что размер всех типов токенов доступа будет меняться со временем, поскольку Facebook вносит изменения в то, что хранится в них и как они закодированы. Вы можете ожидать, что со временем они будут расти и сокращаться. Пожалуйста, используйте тип данных переменной длины без определенного максимального размера для хранения токенов доступа.

Например, чтобы хранить токены в SQL, вы можете избежать использования VARCHAR и вместо этого использовать TEXT или BLOB

Это может быть связано с отделкой токена перед сохранением в базе данных. или размер поля меньше, чем размер чартера токенов. проверьте один раз в таблице {variable} для правильного и полного токена.

В моем случае это было вызвано тем, что accessToken не содержит идентификатор пользователя, когда я сделал запрос «me» (который, я полагаю, пытается определить идентификатор пользователя из токена).

Отклик ответчика:

 App ID: <ID> : <app> User ID: Unknown Issued: Unknown Expires: 1339171200 (in about an hour) Valid: True Origin: Web Scopes: 

Чтобы исправить проблему, вместо запроса «я», я запросил профиль для идентификатора пользователя, к которому у меня был доступ непосредственно из authResponse.

Эта ошибка часто возникает, когда длина токена доступа неверна. Проверьте формат токена.