Oauth

реклама
Артём Курапов
OAUTHОРИЗАЦИЯ И API
СОЦИАЛЬНЫХ СЕТЕЙ
Пузомерки
Facebook – 500 млн (апрель 2010)
Twitter – 145 млн (апрель 2010)
Вконтакте – 91 млн (октябрь 2010)
Linkedin – 75 млн (ноябрь 2010)
Одноклассники – 45 млн (февраль 2010)
От перехвата паролей и .. RSS?
Решение – временные пароли
Свет мой,
зеркальце! скажи
Да, разрешаю
Ищем всех румяных,
милых и белых
Introducing..
• Их две версии и разными
фичами
• Oauth 1.0 reference (RFC5849)
http://tools.ietf.org/html/rfc5849
• Google, Yahoo, Яндекс тоже в
теме
•
Перед употреблением прочитать показания на
упаковке или посоветоваться с аптекарем
Форма следует за содержанием
Абстрактная мысль №1 этого доклада
Twitter
OAuth 1.0 → https://github.com/abraham/twitteroauth → Redirect.php
Consumer key + secret
Access key + secret
SHA1 + Base64
Twitter — API объекты
Statuses, Direct messages
Users, Friends, Followers
Lists, Subscribers
Friendships
Geo places
Trends
Twitter : новое приложение
Схема Oauth
Twitter - Псевдокод
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');
Twitter - впечатления
• Баг длиной ID в php (E14)
• Plaintext (в последний раз как я заглядывал)
Вопросы?
(Про twitter)
Один из семи инструментов пропаганды
Абстрактная мысль №2 этого доклада
Facebook – объекты
User (*), Page (*)
Status
Friends
Likes ←
Post
Note
Photo
Video
Link
Album (Photos, Picture)
Event (Feed, Users, Picture)
Group (Feed, Members, Picture)
Application
Subscription
Insights
Checkin
→ Comments
Facebook – новое приложение
Получаем Consumer key (App ID + secret)
http://developers.facebook.com/setup/
Facebook + серверное приложение
• Oauth 2.0 без подписей, но на SSL
• Перенаправляем с client_id, redirect_uri,
scope = offline_access
https://graph.facebook.com/oauth/authorize
• Пользователь подтверждает привилегии
• Возвращается с code параметром,
обмениваем на access_key
134790075639751|ad22e11d67b06933774e26da712393972|D8PoAPDdvv8onIAf_CasljjK7Pk
Привилегии
Facebook - Псевдокод
if(!$token){
if($_REQUEST['code']){
$token = file_get_contents(
'https://graph.facebook.com/oauth/access_token?client_id='.CONSUMER_KEY.'&clie
nt_secret='.CONSUMER_SECRET.'&code='.$_REQUEST['code'].'&redirect_uri='.CONSUM
ER_URL);
}
else header('Location:
https://graph.facebook.com/oauth/authorize?client_id='.CONSUMER_KEY.'&scope=of
fline_access,create_event,publish_stream,user_events&redirect_uri='.CONSUMER_U
RL);
}
Дальше можно использовать GraphAPI через PHP SDK или просто читать JSON
https://github.com/facebook/php-sdk/
Facebook + Javascript
• “GraphAPI”
• Javascript c FB глобальным объектом
•
•
•
•
FB.init()
FB.login() + FB.logout()
FB.getLoginStatus()
FB.api()
Facebook — впечатления
• Пароли временные
• Нельзя прочитать друзей 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
Вопросы?
(Про facebook)
У каждой веры своё отношение к клонам
Абстрактная мысль №3 этого доклада
Вконтакте - объекты
Friends
Wall
Photos
Audio, Video
Places
Offers
Questions
Notes
Pages
Вконтакте
• Новый «OpenAPI» (3.0), Iframe плюшки
• Javascript с глобальным VK объектом
http://vkontakte.ru/js/api/openapi.js
• Авторизация на MD5 подписях для
PHP/ActionScript
Вконтакте - псевдокод
// старый по логин-паролю
$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'));
LinkedIN – объекты
Person
(Company, Education, Recommendation, Position)
Connection
Share
Invitation
LinkedIN
• OAuth 1.0
• Можно убить access token
• Из объектов API – нет полноценных
«компаний» но есть школы
• Есть JS Api как у Facebook + iframe плюшки
LinkedIN – псевдокод 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/peoplesearch:(people:(id,first-name,last-name,headline,location,industry,distance,public-profileurl,picture-url,positions,educations),num-results)?keywords='.
rawurlencode('Артём Курапов'), array(), 'GET');
$oXml = simplexml_load_string($oResponse->getBody());
Одноклассники - объекты
Users, Friends
Photos
Events
Messages
Одноклассники
•
•
•
•
API появилась ~ в октябре 2010
ActionScript, JavaScript, REST API
SSL
auth.login + auth.loginByToken – цель не уловил
Fin
— а что такое OpenSocial?
Скачать