Protokół OAuth w PHP
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.
OAuth i PHP
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
Tworzymy konsumenta dla Twittera w PHP
- 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>"; } }
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.
Comment article