Расшифровать OAuth 2.0 токен доступа - PullRequest
7 голосов
/ 03 сентября 2011

Возможно ли расшифровать новый OAuth 2.0 от Facebook access_token?

Мне нужно как-то получить user_id и app_id из access_token.

PS:

Мне нужно получитьuser_id и app_id ТОЛЬКО из access_token, как это делал Facebook Linter.

Ответы [ 8 ]

18 голосов
/ 07 сентября 2011

Как уже отмечали другие, access_token - это уникальная случайная строка, поэтому она не может быть расшифрована как таковая. Кроме того, мы все знаем, что user_id и app_id являются предварительными условиями для генерации токена.

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

Чтобы получить user_id, позвоните по номеру:

https://graph.facebook.com/me?fields=id&access_token=xxx

Чтобы получить app_id, позвоните по номеру:

https://graph.facebook.com/app?fields=id&access_token=xxx

В обоих случаях связанные идентификаторы будут частью ответа JSON, независимо от того, является ли access_token зашифрованным или незашифрованным.

Давайте проиллюстрируем это на примере. Давайте предположим, что Марк Цукерберг использует Graph API Explorer для генерации access_token. Вызов конечной точки /me дает вам:

{
  "id": "68310606562"
}

и вызов конечной точки /app дает вам:

{
  "id": "145634995501895"
}

Идентификаторы, которые вы искали, являются частью ответа.

Обратите внимание, что это не работает с access_token, показанным на https://developers.facebook.com/apps (не уверен, является ли это ошибкой Facebook или преднамеренной). Пожалуйста, используйте access_token, которое ваше приложение получает через OAuth.

2 голосов
/ 06 сентября 2011

Если токен доступа в зашифрованном формате, нет никакого программного способа определить идентификатор пользователя и идентификатор приложения.

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

Тем не менее, при условии, что для этого есть законный вариант использования: вызов /me?fields=id вернет идентификатор пользователя и / или вы можете использовать инструмент отладки на https://developers.facebook.com/tools/debug для отладки других свойств токена доступа

0 голосов
/ 07 сентября 2011

Единственный доступный в настоящее время способ - использовать Facebook Access Token Lint Tool.Вы можете рассмотреть возможность автоматизации процесса.

0 голосов
/ 06 сентября 2011

Вы уверены, что говорите здесь о токене доступа, а не о подписанном запросе?

Когда вы загружаете приложение Facebook, у вас есть подписанный объект запроса, который содержит информацию, которую, я полагаю, вы ищете (однако, если пользователь не авторизовал ваше приложение, его идентификатор пользователя не будет указан в подписанном запросе, Facebook безопасность)

0 голосов
/ 06 сентября 2011

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

Что касается AppID, вы должны получить его с Facebook, когда вы создаете там приложение, ваш идентификатор для подключения к Facebook.

Facebook отправляет идентификатор пользователя вместе с accesstoken. просто проверьте свои куки в браузере или в другом случае проверьте всю строку, возвращаемую при запросе токена доступа.

0 голосов
/ 06 сентября 2011

На самом деле это очень простая задача, если вы внимательно посмотрите на сам токен доступа.Он состоит из 3 сегментов, разделенных символом трубы, |:

APP_ID|SOME_STUFF.NUMBER-USERID|SOME_MORE_STUFF

Я не уверен, что такое SOME_STUFF, NUMBER и SOME_MORE_STUFF;предположительно метки времени, подписи или другие закодированные данные, которые Facebook использует для отслеживания достоверности access_token и т. д.возможность доступа к APP_ID и USER_ID из них (и, очевидно, ни к какому Facebook).Поэтому все, что я скажу по этому поводу, - это нести ответственность:)

Еще одна вещь, которую нужно иметь в виду, это то, что это не стандарт или что-то и может быть изменено.Так что следите за этим тоже.

0 голосов
/ 05 сентября 2011

Не существует открытого способа расшифровки токена доступа для получения идентификатора пользователя и идентификатора приложения.Скорее всего, это также серьезное нарушение политики Facebook.

Чтобы получить токен доступа в первую очередь, вы должны иметь доступ к пользователю и идентификатору приложения, так что вам не нужно этого делать.Если на самом деле у вас нет доступа к пользователю или к идентификатору приложения, то, я думаю, вы, вероятно, даже не должны иметь их токен доступа и, вероятно, получили его «незаконно» ...

0 голосов
/ 03 сентября 2011

Обычно вы используете access_token для доступа к другим данным из вашего приложения.Так, например, ваше приложение будет аутентифицировать пользователя, а затем использовать токен доступа для доступа к другим функциям API FB, таким как график:

https://graph.facebook.com/me?access_token=<access_token>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...