Протокол OAuth в PHP

Опубликовано 2021.08.31

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

Список провайдеров, то есть веб-сайтов, предоставляющих API через OAuth, довольно длинный. В этот список входят Twitter, Google, MySpace и многие другие. Для владельцев сайтов, использующих такой API, доступно множество библиотек для различных языков программирования.

OAuth и PHP

Помимо простой библиотеки OAuth на oauth.googlecode.com, на pecl.php.net есть также двоичное расширение. В обеих библиотеках есть образцы сценариев. Кроме того, в Интернете можно найти различные готовые скрипты и библиотеки для OAuth API различных сервисов (например, для Twitter). Стандартно компилируем и устанавливаем расширение pecl:

  1. phpize
  2. ./configure
  3. make
  4. make install
Добавьте в php.ini:
  1. extension = oauth.so;

Создаем клиент для Twitter на PHP

  • Мы начинаем с регистрации клиента на http://twitter.com/oauth_clients. Вводим название нашего «приложения», а также его тип (веб-приложение) и адрес обратного вызова - URL-адрес на нашем веб-сайте, на который пользователь будет перенаправлен после успешной авторизации в Twitter.
  • После успешной регистрации приложения будут сгенерированы Consumer key и Consumer secret, а также основные URL-адреса API, необходимые для использования API:
    • URL-адрес токена запроса: http://twitter.com/oauth/request_token
    • URL-адрес токена доступа: http://twitter.com/oauth/access_token
    • URL авторизации: http://twitter.com/oauth/authorize
  • Использование двоичного расширение от Pecl, код для аутентификации пользователя будет выглядеть так:
  1. // инициализация
  2. $oauth = new OAuth("Consumer key тут","Consumer secret тут",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
  3. // получаем токен запроса (request token)
  4. $request_token_info = $oauth->getRequestToken("http://twitter.com/oauth/request_token");
  5. // сохраняем oauth_token_secret в файл
  6. file_put_contents("token.txt", $request_token_info['oauth_token_secret']);
  7. // перенаправляем пользователя на страницу авторизации
  8. header('Location: http://twitter.com/oauth/authorize?oauth_token='.$request_token_info['oauth_token']);

После успешного входа в Tweeter пользователь будет перенаправлен на URL-адрес, указанный в качестве обратного вызова. Вот пример кода обработки:

  1. $oauth = new OAuth("Consumer key тут","Consumer secret тут",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
  2. // загружаем oauth_token_secret
  3. $request_token_secret = file_get_contents("token.txt");
  4. if(!empty($_GET['oauth_token'])){
  5. $oauth->setToken($_GET['oauth_token'],$request_token_secret);
  6. $access_token_info = $oauth->getAccessToken('http://twitter.com/oauth/access_token');
  7. // запрашиваем пример метода API:
  8. $data = $oauth->fetch('http://twitter.com/account/verify_credentials.json');
  9. if($data){
  10. $response_info = $oauth->getLastResponse();
  11. echo "<pre>";
  12. print_r(json_decode($response_info));
  13. echo "</pre>";
  14. }
  15. }

Вам необязательно использовать двоичные расширения. Вы также можете использовать библиотеки, написанные на чистом PHP, например twitteroauth.

Скачиваем код с помощью GIT (или вручную, если у вас его нет):

  1. git clone git://github.com/abraham/twitteroauth.git

Далее редактируем файл example/index.php, добавляем ключ и секретный токен приложения.