Авторизация в Twitter с OAuth 1.0
Твиттер (а также Yahoo, Google, Facebook и LinkedIn ) штоб-его-заногу перешёл на безопасный OAuth и я вспомнил как в своё время с матюгами несколько дней ставил серверную часть OpenID на сайт. А они ведь похожи (авторам нравится буковка О, ага). Вобщем - как это работает? Если раньше был пользователь и твиттер, а мы со своим приложением притворялись пользователем используя его логин-пароль, то теперь чётко выделяются три лица
- пользователь со своим браузером (client)
- мы-разработчики со своим сайтом или desktop-приложением (consumer)
- Твиттер предоставляющий всякие услуги (service provider)
Про desktop-приложения уже говорили, я расскажу только для сайта с php. В ходе обмена данными между собой используются три пары ключей (tokens = markers) которые на уровне библиотеки по хитрому алгоритму HMAC-SHA1 делают подпись (signature) и всё это компонуют в base64 для обмена. Значит существуют:
-
Ключ приложения (consumer key + secret) - нужен для нашей уникальности consumer'а
-
Ключ запроса (request token + secret) - временный; аналог сессии между приложением и твиттером
-
Ключ доступа (access token + secret) - постоянный для приложения, подобно "логин-паролю" и действует покуда пользователь у себя не запретит этот полу-аккаунт третьей стороны (т.е. нас)
Процесс
-
Идём регим приложение в твиттере, где указываем Callback URL (собственно где приложение находится) и получаем первый ключ (consumer_key + secret)
-
Скачиваем, распаковываем и ставим оффициально признанную библиотеку twitteroauth, ставим в config вышеупомянутые два параметра
-
Теперь если запустить index.php, то выполняется описанный в диаграмме процесс начальной связки пользователя с приложением. Это никак не исключить - надо либо делать popup, либо как я - сделал полноценную ссылку на redirect.php
-
Библиотеку надо отредактировать так, что-бы вместо констант использовались переменные из сессии (Ключ приложения). В index.php после успешной авторизации надо вставить редирект обратно в приложение, таким образом библиотека будет независимым модулем.
-
После успешного получения ключа доступа и редиректа обратно в приложение, мы сохраняем ключ доступа и используем теперь только его.
При переходе со старой авторизации на новую формат данных к счастью не поменялся. Для получения своей ленты сообщений теперь достаточно кода
$connection = new TwitterOAuth($aSyncAccount['consumer_key'], $aSyncAccount['consumer_secret'], $aSyncAccount['access_key'], $aSyncAccount['access_secret']);
$user = $connection->get('account/verify_credentials');
$arrPosts = $connection->get('statuses/user_timeline');
По теме: