OAuth to otwarty protokół pozwalający na bezpieczną autoryzację za pomocą API dla aplikacji desktopowych, mobilnych i aplikacji internetowych. OAuth pozwala użytkownikowi dać dostęp do jego informacji, opcji na stronie A (dostawcy OAuth, np. Twitter) innej stronie B (konsumentowi) bez podawania pełnych danych uwierzytelniających (np. bez podawania loginu i hasła). Standard te obecnie jest implementowany na coraz większej ilości strony, jako że pozwala im wystawiać bezpieczniejsze API, jak i dające pewność użytkownikami co zewnętrzna strona z nimi zrobi. Przykładowa prosta aplikacja webowa przedstawiona jest na twitteroauth.appspot.com - gdzie poprzez OAuth udostępniamy stronie ostatnie tweety z naszego konta na Tweeterze.
Lista dostawców, czyli stron udostępniających API poprzez OAuth jest dość długa. Na liście tej znajdziemy Twittera, Google, MySpace, czy także Gadu Gadu. Dla twórców konsumentów - stron korzystających z takiego API dostępne jest wiele bibliotek dla różnych języków programistycznych.
Oprócz prostej biblioteki OAuth na
oauth.googlecode.com jest dostępne także binarne rozszerzenie na
pecl.php.net. Obie biblioteki posiadają przykładowe skrypty. Dodatkowo znaleźć można w sieci różne gotowe skrypty i biblioteki na API OAuth różnych serwisów (jak np. dla Twittera). Rozszerzenie z pecl kompilujemy i instalujemy standardowo:
phpize
./configure
make
make install
Do php.ini dodajemy
extension=oauth.so;.
- Zaczynamy od zarejestrowania klienta/konsumenta na http://twitter.com/oauth_clients. Podajemy nazwę naszej "aplikacji", a także jej typ (aplikacja webowa) i adres callback - adres URL na naszej stronie, na który zostanie przekierowany użytkownik po pomyślnej autoryzacji na stronie Twittera.
- Po udanym zarejestrowaniu aplikacji wygenerowany zostanie klucz Consumer key oraz Consumer secret, a także podane zostaną podstawowe adresy URL API potrzebne przy wykorzystaniu API:
- Request token URL: http://twitter.com/oauth/request_token
- Access token URL: http://twitter.com/oauth/access_token
- Authorize URL: http://twitter.com/oauth/authorize
- Korzystając z binarnego rozszerzenia z Pecl kod do uwierzytelnienia użytkownika wygląda tak:
<?php
// inicjalizacja
$oauth = new OAuth("Consumer Key tutaj","Consumer secret tutaj",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
// pobieranie tokena żądania (request token)
$request_token_info = $oauth->getRequestToken("http://twitter.com/oauth/request_token");
// zapisujemy oauth_token_secret do pliku
file_put_contents("token.txt",$request_token_info['oauth_token_secret']);
// przekierowujemy użytkownika na stronę logowania:
header('Location: http://twitter.com/oauth/authorize?oauth_token='.$request_token_info['oauth_token']);
- Po udanym zalogowaniu na Tweeterze użytkownik zostanie przekierowany na adres URL podany jako callback. Oto przykład kodu obsługującego zwrotkę:
<?php
$oauth = new OAuth("Consumer Key tutaj","Consumer secret tutaj",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
// wczytujemy oauth_token_secret
$request_token_secret = file_get_contents("token.txt");
if(!empty($_GET['oauth_token'])){
$oauth->setToken($_GET['oauth_token'],$request_token_secret);//user allowed the app, so u
$access_token_info = $oauth->getAccessToken('http://twitter.com/oauth/access_token');
// żądamy przykładową metodę API:
$data = $oauth->fetch('http://twitter.com/account/verify_credentials.json');
if($data){
$response_info = $oauth->getLastResponse();
echo "<pre>";
print_r(json_decode($response_info));
echo "</pre>";
}
}
Nie trzeba stosować binarnych rozszerzeń. Można także wykorzystać biblioteki napisane w czystym PHP, np.
twitteroauth. Pobieramy kod za pomocą GITa (lub ręcznie jak go nie masz):
git clone git://github.com/abraham/twitteroauth.git
I edytujemy plik example/index.php wstawiając klucz i consumer secret.
Jeżeli chcesz umożliwić rejestrację/logowanie użytkowników za pomocą konta na Twitterze to prostszym rozwiązaniem może okazać się zastosowanie RPXnow.
- Dodane: 17.10.2009 przez riklaunim