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:
phpize ./configure make make install
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, код для аутентификации пользователя будет выглядеть так:
// инициализация $oauth = new OAuth("Consumer key тут","Consumer secret тут",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); // получаем токен запроса (request token) $request_token_info = $oauth->getRequestToken("http://twitter.com/oauth/request_token"); // сохраняем oauth_token_secret в файл // перенаправляем пользователя на страницу авторизации header('Location: http://twitter.com/oauth/authorize?oauth_token='.$request_token_info['oauth_token']);
После успешного входа в Tweeter пользователь будет перенаправлен на URL-адрес, указанный в качестве обратного вызова. Вот пример кода обработки:
$oauth = new OAuth("Consumer key тут","Consumer secret тут",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); // загружаем oauth_token_secret $oauth->setToken($_GET['oauth_token'],$request_token_secret); $access_token_info = $oauth->getAccessToken('http://twitter.com/oauth/access_token'); // запрашиваем пример метода API: $data = $oauth->fetch('http://twitter.com/account/verify_credentials.json'); if($data){ $response_info = $oauth->getLastResponse(); echo "<pre>"; echo "</pre>"; } }
Вам необязательно использовать двоичные расширения. Вы также можете использовать библиотеки, написанные на чистом PHP, например twitteroauth.
Скачиваем код с помощью GIT (или вручную, если у вас его нет):
git clone git://github.com/abraham/twitteroauth.git
Далее редактируем файл example/index.php, добавляем ключ и секретный токен приложения.