Слайд 1OAUTHОРИЗАЦИЯ И API СОЦИАЛЬНЫХ СЕТЕЙ
Артём Курапов
Слайд 2Пузомерки
Facebook – 500 млн (апрель 2010)
Twitter – 145 млн (апрель 2010)
Вконтакте
– 91 млн (октябрь 2010)
Linkedin – 75 млн (ноябрь 2010)
Одноклассники – 45 млн (февраль 2010)
Слайд 3От перехвата паролей и .. RSS?
Слайд 4Решение – временные пароли
Свет мой, зеркальце! скажи
Ищем всех румяных, милых и
Слайд 5Introducing..
Их две версии и разными фичами
Oauth 1.0 reference (RFC5849)
http://tools.ietf.org/html/rfc5849
Google, Yahoo, Яндекс
тоже в теме
Перед употреблением прочитать показания на упаковке или посоветоваться с аптекарем
Слайд 6Форма следует за содержанием
Абстрактная мысль №1 этого доклада
Слайд 7Twitter
OAuth 1.0 → https://github.com/abraham/twitteroauth → Redirect.php
Consumer key + secret
Access key +
secret
SHA1 + Base64
Слайд 8Twitter — API объекты
Statuses, Direct messages
Users, Friends, Followers
Lists, Subscribers
Friendships
Geo places
Trends
Слайд 11Twitter - Псевдокод
require_once('twitteroauth/twitteroauth.php');
require_once('twitter_oauth/config.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');
Слайд 12Twitter - впечатления
Баг длиной ID в php (E14)
Plaintext (в последний раз
как я заглядывал)
Слайд 14Один из семи инструментов пропаганды
Абстрактная мысль №2 этого доклада
Слайд 15Facebook – объекты
User (*), Page (*)
Status
Post
Note
Photo
Video
Link
Album (Photos, Picture)
Event (Feed, Users,
Picture)
Group (Feed, Members, Picture)
Application
Subscription
Insights
Checkin
→ Comments
Likes ←
Friends
Слайд 16Facebook – новое приложение
Получаем Consumer key (App ID + secret)
http://developers.facebook.com/setup/
Слайд 17Facebook + серверное приложение
Oauth 2.0 без подписей, но на SSL
Перенаправляем с
client_id, redirect_uri, scope = offline_access
https://graph.facebook.com/oauth/authorize
Пользователь подтверждает привилегии
Возвращается с code параметром, обмениваем на access_key
134790075639751|ad22e11d67b06933774e26da-712393972|D8PoAPDdvv8onIAf_CasljjK7Pk
Слайд 19Facebook - Псевдокод
if(!$token){
if($_REQUEST['code']){
$token = file_get_contents( 'https://graph.facebook.com/oauth/access_token?client_id='.CONSUMER_KEY.'&client_secret='.CONSUMER_SECRET.'&code='.$_REQUEST['code'].'&redirect_uri='.CONSUMER_URL);
}
else
header('Location: https://graph.facebook.com/oauth/authorize?client_id='.CONSUMER_KEY.'&scope=offline_access,create_event,publish_stream,user_events&redirect_uri='.CONSUMER_URL);
}
Дальше можно использовать GraphAPI через PHP SDK или просто читать JSON
https://github.com/facebook/php-sdk/
Слайд 20Facebook + Javascript
“GraphAPI”
Javascript c FB глобальным объектом
FB.init()
FB.login() + FB.logout()
FB.getLoginStatus()
FB.api()
Слайд 21Facebook — впечатления
Пароли временные
Нельзя прочитать друзей X пользователя без разрешения даже
если пользователь разрешил видеть всем
#604 error: Сan't lookup all friends of XXXXXX. Can only lookup for the logged in user (XXXXXX), or friends of the logged in user with the appropriate permission
Слайд 23У каждой веры своё отношение к клонам
Абстрактная мысль №3 этого доклада
Слайд 24Вконтакте - объекты
Friends
Wall
Photos
Audio, Video
Places
Offers
Questions
Notes
Pages
Слайд 25Вконтакте
Новый «OpenAPI» (3.0), Iframe плюшки
Javascript с глобальным VK объектом
http://vkontakte.ru/js/api/openapi.js
Авторизация на MD5
подписях для PHP/ActionScript
Слайд 26Вконтакте - псевдокод
// старый по логин-паролю
$vkontakte = new vkuserapi ($aSyncAccount['login'], $aSyncAccount[‘password']);
$vkontakte->call ('set_activity',array('ts'=>time(),'text'=> $strMessage));
// новая через ID приложения
$VK = new vkapi($api_id, $secret_key);
$resp = $VK->api('getProfiles', array('uids'=>'1, 2'));
Слайд 27LinkedIN – объекты
Person
(Company, Education, Recommendation, Position)
Connection
Share
Invitation
Слайд 28LinkedIN
OAuth 1.0
Можно убить access token
Из объектов API – нет полноценных «компаний»
но есть школы
Есть JS Api как у Facebook + iframe плюшки
Слайд 29LinkedIN – псевдокод c PEAR
require_once 'HTTP/OAuth.php‘; require_once 'HTTP/OAuth/Consumer/Request.php';
require_once 'HTTP/Request2.php‘; require_once 'HTTP/OAuth/Consumer.php';
$oRequest
= new HTTP_Request2;
$oRequest->setHeader('Accept-Encoding', '.*');
$oRequest->setConfig('ssl_verify_peer', false);
$oRequest->setConfig('ssl_verify_host', false);
$oAuthRequest = new HTTP_OAuth_Consumer_Request;
$oAuthRequest->accept($oRequest);
$oConsumer = new HTTP_OAuth_Consumer( $aSyncAccount['consumer_key'], $aSyncAccount['consumer_secret'], $aSyncAccount['access_token'], $aSyncAccount['access_token_secret'] );
$oConsumer->accept($oAuthRequest);
$oResponse = $consumer->sendRequest('http://api.linkedin.com/v1/people-search:(people:(id,first-name,last-name,headline,location,industry,distance,public-profile-url,picture-url,positions,educations),num-results)?keywords='.
rawurlencode('Артём Курапов'), array(), 'GET');
$oXml = simplexml_load_string($oResponse->getBody());
Слайд 30Одноклассники - объекты
Users, Friends
Photos
Events
Messages
Слайд 31Одноклассники
API появилась ~ в октябре 2010
ActionScript, JavaScript, REST API
SSL
auth.login + auth.loginByToken
– цель не уловил