Статьи

OAuth для PHP Twitter приложений, часть 2

В первой части мы рассмотрели, как реализовать серверное приложение, которое будет работать автономно с использованием OAuth , теперь единственного принятого в Twitter метода аутентификации. Во второй части мы рассмотрим, как разрешить пользователям входить на ваш сайт, используя технику аутентификации Twitter «Войти через Twitter» . Это, в свою очередь, даст нам доступ к API Twitter.

Возможно, вы заметили, что кнопки «Войти с помощью x » становятся все более популярными, поскольку число комбинаций имени пользователя и пароля, которые мы просим запомнить, кажется, увеличивается в геометрической прогрессии.

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

Использование методов единого входа в популярных крупномасштабных приложениях, таких как Twitter и Facebook, помогло популяризировать его как упрощенный способ регистрации пользователей на вашем веб-сайте. И вы можете оставить беспокойство за процессы безопасности!

Посмотрим, как это делается.

Как и в первой части, если вы хотите использовать API-интерфейс Twitter в любой форме, вам необходимо зарегистрировать приложение в их службе разработчиков. Перейдите по адресу http://dev.twitter.com/apps и заполните форму, уделяя особое внимание следующим полям:

  • Тип приложения должен быть браузером . Взаимодействие между пользователем и Twitter происходит исключительно в браузере.

  • URL обратного вызова относится к файлу PHP на вашем сервере, к которому Twitter будет обращаться для обработки результата запроса входа в систему. Мы собираемся создать этот файл и назвать его callback.php Не забудьте также указать имя сервера; например, http://yourserver.com/twitter/callback.php

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

После регистрации Twitter предоставит вам ключ OAuth Consumer и Consumer secret, которые вам необходимо будет записать для использования при разработке процесса входа в систему.

Еще раз, мы будем использовать фантастический класс обертки Twitter / OAuth, TwitterOAuth , написанный Абрахамом Уильямсом . Как и в первой части, мы будем использовать версию 0.2.0-бета3; однако на этот раз никаких изменений не требуется. Для начала скачайте копию библиотеки .

Наша первая задача — создать страницу, которая запускает весь процесс входа на ваш сервер. Для этого потребуется выполнить небольшую работу OAuth, создав пару токенов запроса, которые необходимо присоединить к нашей ссылке для входа.

Создайте файл login.php

Пример 1. login.php

  <? php session_start ();  // Включить класс & create require_once ("consumer-keys.php"); require_once ("twitteroauth / twitteroauth.php");  // Создаем объект TwitterOAuth с помощью предоставленных нами ключей Twitter $ tOAuth = new TwitterOAuth ($ consumerKey, $ consumerSecret);  // Генерируем маркеры запроса  // Показать кнопку входа в Twitter с закодированной ссылкой echo "<a href="". $tOAuth-> getAuthorizeURL ($ requestToken [" oauth_token "])." "> <Img src =" http: //a0.twimg. ком / изображения / DEV / кнопки / знак-в-с-твиттер-d.png "> </a>";?> 


Теперь создайте файл consumer-keys.php


Верьте или нет, вы уже на полпути. Перейдите на страницу входа и нажмите кнопку входа, чтобы попасть на сайт Twitter. Он попросит вас разрешить или запретить «[Имя вашего приложения]» доступ к вашей учетной записи Twitter.

Если вы в этот момент нажмете любую из опций, вы получите ошибку 404. Twitter пытается загрузить ваш URL обратного вызова , который мы еще не создали. Давайте сделаем это сейчас.

Затем вы создадите файл обратного вызова, который вы указали при регистрации приложения в Twitter. Этот файл является контроллером процесса аутентификации на вашем сервере. В зависимости от выбора пользователя (разрешить или запретить), теперь вы должны выполнять соответствующие функции.

Во-первых, мы будем обрабатывать запрет доступа пользователя. Твиттер отобразит «запрещенную» страницу со ссылкой, чтобы отослать пользователя обратно на ваш URL обратного вызова. Он также прикрепит переменную GETdenied

Если вы хотите быть очень осторожными, вы можете проверить, что $_GET["denied"]$_SESSION["oauth_token"] Как вы справляетесь с отрицанием, зависит только от вас. В этом случае я просто предоставляю ссылку на страницу входа.

Создайте файл callback.php


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

На этом этапе должны быть приняты решения о хранении этих токенов доступа. Возможно, вы захотите сохранить их в файле cookie (чтобы использовать его аналогично флажку «Запомнить меня» в обычной системе входа в систему) или в базе данных для сопоставления с локальной записью, связанной с пользователем. Для простоты демонстрации я просто помещаю их в хранилище сессии.

После сохранения маркеров доступа в сеансе вы можете отменить регистрацию предыдущих маркеров запроса, поскольку они больше не требуются, и перенаправить пользователя:


Теперь, когда Twitter дал нам ключи от королевства (токены доступа, хранящиеся в нашем сеансе), странице, на которую направляется пользователь, просто нужно проверить токены и проверить их с помощью Twitter. После этого ваш пользователь может продолжить, как если бы он вошел на ваш сайт, используя специальный процесс локального входа. В качестве дополнительного бонуса у вас теперь есть возможность выполнять вызовы API против Twitter.

Создайте файл welcome.php


Предоставление функции единого входа с помощью OAuth и входа через Twitter — эффективный способ облегчить жизнь посетителям вашего сайта. Вы также можете воспользоваться некоторыми мощными возможностями взаимодействия, одновременно защищая безопасность своих пользователей.