В первой части мы рассмотрели, как реализовать серверное приложение, которое будет работать автономно с использованием 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
Пример 2. consumer-keys.php
<? php // Twitter предоставил ключ и секрет для вашего зарегистрированного приложения $ consumerKey = "[вставьте ваш Twitter предоставленный ключ потребителя]"; $ consumerSecret = "[вставьте в Twitter свой предоставленный секрет пользователя]"; ?>
Верьте или нет, вы уже на полпути. Перейдите на страницу входа и нажмите кнопку входа, чтобы попасть на сайт Twitter. Он попросит вас разрешить или запретить «[Имя вашего приложения]» доступ к вашей учетной записи Twitter.
Если вы в этот момент нажмете любую из опций, вы получите ошибку 404. Twitter пытается загрузить ваш URL обратного вызова , который мы еще не создали. Давайте сделаем это сейчас.
Затем вы создадите файл обратного вызова, который вы указали при регистрации приложения в Twitter. Этот файл является контроллером процесса аутентификации на вашем сервере. В зависимости от выбора пользователя (разрешить или запретить), теперь вы должны выполнять соответствующие функции.
Во-первых, мы будем обрабатывать запрет доступа пользователя. Твиттер отобразит «запрещенную» страницу со ссылкой, чтобы отослать пользователя обратно на ваш URL обратного вызова. Он также прикрепит переменную GET
denied
Если вы хотите быть очень осторожными, вы можете проверить, что $_GET["denied"]
$_SESSION["oauth_token"]
Как вы справляетесь с отрицанием, зависит только от вас. В этом случае я просто предоставляю ссылку на страницу входа.
Создайте файл callback.php
Пример 3. callback.php
<? php session_start (); // Включить класс & create require_once ("consumer-keys.php"); require_once ("twitteroauth / twitteroauth.php"); // Пользователь выбрал DENY доступ, если (! Empty ($ _ GET ["denied"])) {// может перенаправить или отобразить отмененный вид / шаблон // мы просто выводим эхо сообщения "Нет сделки! <a href='login.php'> Попробуйте еще раз? </a> "; умереть ();}>?
Далее нам нужно обработать более желательный вариант: предоставить вашему пользователю доступ для входа на ваш сайт. На этот раз начальный токен запроса отправляется обратно в GET
oauth_token
На этом этапе должны быть приняты решения о хранении этих токенов доступа. Возможно, вы захотите сохранить их в файле cookie (чтобы использовать его аналогично флажку «Запомнить меня» в обычной системе входа в систему) или в базе данных для сопоставления с локальной записью, связанной с пользователем. Для простоты демонстрации я просто помещаю их в хранилище сессии.
После сохранения маркеров доступа в сеансе вы можете отменить регистрацию предыдущих маркеров запроса, поскольку они больше не требуются, и перенаправить пользователя:
Пример 4. callback.php
<? php // Пользователь выбрал РАЗРЕШИТЬ доступ для данного токена if ($ _ GET ["oauth_token"] == $ _SESSION ["oauth_token"]) {// Использовать сгенерированные токены запроса (из сеанса) для создания объекта $ tOAuth = новый TwitterOAuth ($ consumerKey, $ consumerSecret, $ _SESSION ["oauth_token"], $ _SESSION ["oauth_token_secret"]); // Получить токен доступа из Twitter $ accessToken = $ tOAuth-> getAccessToken (); // Убедитесь, что у нас есть правильный ответ if (is_numeric ($ accessToken ["user_id"])) {// Сохраняем токены доступа в БД (мы используем сессию) $ _SESSION ["access_token"] = $ accessToken; // Удалить переменные сеанса маркера запроса unset ($ _ SESSION ["oauth_token"]); снята с охраны ($ _ SESSION [ "oauth_token_secret"]); // Перенаправление на заголовок главной страницы ("location: welcome.php"); } else {header ("location: login.php"); }}?>
Теперь, когда Twitter дал нам ключи от королевства (токены доступа, хранящиеся в нашем сеансе), странице, на которую направляется пользователь, просто нужно проверить токены и проверить их с помощью Twitter. После этого ваш пользователь может продолжить, как если бы он вошел на ваш сайт, используя специальный процесс локального входа. В качестве дополнительного бонуса у вас теперь есть возможность выполнять вызовы API против Twitter.
Создайте файл welcome.php
Пример 5. welcome.php
<? php session_start (); // Включить class & createrequire_once ("consumer-keys.php"); require_once ("twitteroauth / twitteroauth.php"); // Проверьте, что у нас есть активный сеанс с токенами доступа из Twitter, если (! Empty ($ _ SESSION ["access_token"]) &&! Empty ($ _ SESSION ["access_token"] ["oauth_token"])) {// Создать новый объект TwitterOAuth с Маркеры доступа // Выполнить запрос API $ credentials = $ tOAuth-> get ('account / verify_credentials'); echo "Вы вошли как @". $ Credentials-> screen_name; echo "<br> YAY! Вы вошли в систему через Twitter через OAuth!";}?>
Предоставление функции единого входа с помощью OAuth и входа через Twitter — эффективный способ облегчить жизнь посетителям вашего сайта. Вы также можете воспользоваться некоторыми мощными возможностями взаимодействия, одновременно защищая безопасность своих пользователей.