
Wrzesień 2008 r.
Wprowadzenie
To ekscytujący czas dla deweloperów. W internecie zaczyna się pojawiać coraz więcej otwartych standardów. Jak wiesz, Google zawsze było wielkim zwolennikiem standardów i wspierania społeczności open source.
Niedawno wszystkie interfejsy Google Data API zaczęły obsługiwać OAuth, otwarty protokół, który ma na celu ujednolicenie sposobu, w jaki aplikacje na komputery i w internecie uzyskują dostęp do prywatnych danych użytkownika. OAuth umożliwia uwierzytelnianie interfejsu API w standardowy i bezpieczny sposób. Jako programiści uczymy się, że w miarę możliwości należy ponownie wykorzystywać kod. OAuth pomoże deweloperom ograniczyć ilość powielanego kodu i ułatwi tworzenie narzędzi, które działają z wieloma usługami różnych dostawców.
Odbiorcy
W tym artykule zakładamy, że znasz co najmniej jeden z interfejsów Google Data API, ale niekoniecznie pojęcia związane z OAuth. Jeśli dopiero zaczynasz lub po prostu interesujesz się OAuth, nie musisz szukać dalej. W tym artykule znajdziesz podstawowe informacje o tych pojęciach. Omówię też szczegóły implementacji protokołu OAuth w Google.
Ten dokument jest również przeznaczony dla deweloperów, którzy znają AuthSub, zwłaszcza w trybie zarejestrowanym z rozszerzonymi zabezpieczeniami. W trakcie prezentacji będę zwracać uwagę na podobieństwa i różnice między tymi dwoma protokołami. Jeśli masz aplikacje, które korzystają z AuthSub, możesz użyć tych informacji, aby przeprowadzić migrację do OAuth, czyli bardziej otwartego i nowoczesnego protokołu.
Trochę terminologii
Aby zrozumieć OAuth, musisz poznać jego terminologię. Specyfikacja OAuth i dokumentacja Google Uwierzytelnianie OAuth w aplikacjach internetowych w dużej mierze opierają się na określonych definicjach, dlatego wyjaśnimy, co każda z nich oznacza w kontekście implementacji OAuth w Google.
- „Proces OAuth”
Nieoficjalne określenie pełnego procesu uwierzytelniania i autoryzacji OAuth.
- (OAuth) Poproś o token
Początkowy token, który informuje Google, że Twoja aplikacja prosi o dostęp do jednego z interfejsów Google Data API. Drugi etap procesu OAuth polega na ręcznym przyznaniu dostępu do danych. Jeśli ten krok się powiedzie, token żądania zostanie autoryzowany.
- Token dostępu (OAuth)
Ostatnim krokiem jest wymiana autoryzowanego tokena żądania na token dostępu. Gdy aplikacja otrzyma ten token, użytkownik nie będzie musiał ponownie przechodzić procesu autoryzacji OAuth, chyba że token zostanie unieważniony.
Podobieństwo do AuthSub:
Token dostępu OAuth jest tym samym co bezpieczny token sesji AuthSub. - Punkty końcowe (OAuth)
Są to identyfikatory URI wymagane do uwierzytelnienia aplikacji i uzyskania tokena dostępu. Łącznie są 3 – po jednym na każdy etap procesu OAuth. Punkty końcowe OAuth Google to:
Uzyskiwanie tokena żądania: https://www.google.com/accounts/OAuthGetRequestToken
Autoryzuj token żądania: https://www.google.com/accounts/OAuthAuthorizeToken
Przejdź na token dostępu: https://www.google.com/accounts/OAuthGetAccessToken
Podobieństwo do AuthSub:
Wymiana autoryzowanego tokena żądania na token dostępu jest analogiczna do przekształcenia jednorazowego tokena AuthSub w długotrwały token sesji odpowiednio w przypadkuhttps://www.google.com/accounts/AuthSubRequestToken
ihttps://www.google.com/accounts/AuthSubSessionToken
. Różnica polega na tym, że AuthSub nie ma koncepcji początkowego tokena żądania. Zamiast tego użytkownik rozpoczyna proces tokena naAuthSubRequestToken
stronie autoryzacji. - Dostawca usług (OAuth)
W przypadku interfejsów Google Data API tym dostawcą jest Google. Ogólnie rzecz biorąc, dostawca usług to witryna lub usługa internetowa, która udostępnia punkty końcowe OAuth. Innym przykładem dostawcy usług OAuth jest MySpace.
- (OAuth) Konsument
Program, który prosi o dostęp do danych użytkownika (czyli Twoja aplikacja). Protokół OAuth jest elastyczny, ponieważ umożliwia korzystanie z wielu różnych typów klientów (internetowych, zainstalowanych, na komputery, mobilnych).
Uwaga: chociaż protokół OAuth obsługuje przypadek użycia aplikacji na komputery lub zainstalowanych, Google obsługuje OAuth tylko w przypadku aplikacji internetowych.
Pierwsze kroki
Rejestracja
Zanim zaczniesz używać OAuth z interfejsami Google Data API, musisz wykonać kilka czynności konfiguracyjnych. Ponieważ wszystkie żądania OAuth muszą być podpisane cyfrowo, najpierw musisz zarejestrować domenę i przesłać do Google certyfikat publiczny. Więcej informacji o tym, jak to zrobić, znajdziesz w artykułach Rejestracja aplikacji internetowych i Generowanie kluczy i certyfikatów do użycia w trybie zarejestrowanym.
Prośby o podpisanie
Po zarejestrowaniu domeny możesz zacząć podpisywać żądania. Jednym z najtrudniejszych aspektów protokołu OAuth jest prawidłowe tworzenie oauth_signature
i pojęcie ciągu bazowego podpisu. Ciąg podstawowy to dane, które podpisujesz kluczem prywatnym (za pomocą RSA_SHA1
). Wynikiem jest wartość, którą ustawiasz dla parametru oauth_signature
.
Przykładowe żądanie
GET
lista kalendarzy Google użytkownika na stronie http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
;
Format ciągu bazowego | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
Przykładowy ciąg bazowy | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
Przykładowe żądanie HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
Uwaga: to tylko przykład. oauth_signature
będzie znacznie dłuższy.
Uwagi dotyczące ciągu bazowego:
- Parametr zapytania
orderby=starttime
jest sortowany wraz z pozostałymi parametramioauth_*
w porządku leksykograficznym wartości bajtów. - Ten ciąg nie zawiera też znaku „?”.
- Część
base-http-request-url
zawiera tylko zakodowany adres URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. - Parametr
oauth_token
jest dwukrotnie zakodowany w adresie URL.
Uwagi dotyczące nagłówka Authorization
:
- Kolejność parametrów
oauth_*
w nagłówkuAuthorization
nie ma znaczenia. - Nagłówek nie zawiera znaku
orderby=starttime
, tak jak ciąg podstawowy. Ten parametr zapytania jest zachowywany jako część adresu URL żądania.
Więcej informacji o podpisywaniu żądań za pomocą OAuth znajdziesz w artykule Podpisywanie żądań OAuth.
Różnica w porównaniu z AuthSub:
Dla porównania podajemy ten sam przykład z użyciem bezpiecznego AuthSub:
Format ciągu bazowego | base_string = http-method http-request-URL timestamp nonce |
---|---|
Przykładowy ciąg bazowy |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
Przykładowe żądanie HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
Więcej informacji o podpisywaniu żądań za pomocą AuthSub znajdziesz w artykule Podpisywanie żądań AuthSub.
Narzędzie OAuth Playground
Cel
Niektórzy użytkownicy twierdzą, że OAuth jest trudny do opanowania. W porównaniu z innymi interfejsami API Google do uwierzytelniania, tak. Zalety protokołu OAuth staną się widoczne, gdy rozszerzysz aplikację o inne usługi (nie Google). Napisanie jednego fragmentu kodu uwierzytelniania, który działa u różnych dostawców usług i ich interfejsów API, brzmi całkiem nieźle. Później podziękujesz sobie za to, że teraz poznajesz protokół.
OAuth Playground to narzędzie, które stworzyłem, aby pomóc deweloperom w rozwiązywaniu problemów z OAuth. Możesz używać środowiska testowego do debugowania problemów, sprawdzania własnej implementacji lub eksperymentowania z interfejsami Google Data API.
Na czym to polega?
- Ilustracja procesu uwierzytelniania OAuth: pobieranie tokena żądania, autoryzowanie tokena i przekształcanie go w token dostępu.
- Wyświetla prawidłowy ciąg bazowy podpisu dla każdego żądania.
- Wyświetla prawidłowy nagłówek
Authorization
dla każdego żądania. - Pokazuje, jak za pomocą
oauth_token
wchodzić w interakcje z uwierzytelnionym plikiem danych Google. MożeszGET
/POST
/PUT
/DELETE
dane. - Wyświetl uwierzytelniony plik danych bezpośrednio w przeglądarce.
- Umożliwia przetestowanie własnej
oauth_consumer_key
(zarejestrowanej domeny) i klucza prywatnego. - Dowiedz się, jakie usługi związane z plikami danych Google są dostępne w przypadku Twojego konta
oauth_token
.
Uruchomienie demonstracyjne
Krok 1. Wybierz zakresyNajpierw zdecyduj, których interfejsów API chcesz używać, wybierając co najmniej 1 zakres. W tym przykładzie proszę o token, który będzie działać w przypadku Blogera i Kontaktów Google. Podobieństwo do AuthSub: |
![]() |
Krok 2. Zmień parametry i ustawienia OAuthNa razie nie zmieniaj żadnych ustawień w polu „Modify the OAuth Parameters” (Modyfikuj parametry OAuth). Później możesz przetestować działanie narzędzia za pomocą własnego klucza prywatnego. W tym celu zmień Uwaga: tylko pola Oprócz Różnica w stosunku do AuthSub: |
![]() |
Kroki 3–5. Uzyskiwanie tokena dostępuAby uzyskać token dostępu OAuth, musisz wykonać 3 kroki. Pierwszym krokiem jest pobranie tokena żądania. Dzięki temu Google wie, że aplikacja rozpoczyna proces OAuth. Najpierw kliknij przycisk „Request token” (Poproś o token) w polu „Get the Token” (Pobierz token). Niektóre pola zostaną wypełnione danymi.
|
![]() ![]() |
Następnie w polu „Uzyskaj token” kliknij przycisk „Authorize” (Autoryzuj). Na tej stronie autoryzacji kliknij przycisk „Grant Access” (Przyznaj dostęp), aby autoryzować token żądania i wrócić do narzędzia OAuth Playground. Podobieństwo do AuthSub: Różnica w stosunku do AuthSub: Wskazówka: jeśli piszesz aplikację internetową, zalecamy podanie adresu URL |
![]() |
Na koniec kliknij przycisk „Token dostępu” w polu „Uzyskaj token”. Ta czynność powoduje uaktualnienie autoryzowanego tokena żądania (oznaczonego czerwoną etykietą „token dostępu”). Jeśli chcesz pobrać nowy token, kliknij „Rozpocznij od nowa”, aby ponownie zainicjować proces OAuth. Teraz możemy zrobić coś ciekawego. |
![]() |
Używanie tokena dostępu
Teraz możesz wysyłać zapytania do plików danych, wstawiać, aktualizować i usuwać dane. Podczas wykonywania tych 3 ostatnich metod HTTP zachowaj ostrożność, ponieważ pracujesz z prawdziwymi danymi.
Wskazówka: aby wyświetlić pliki danych dostępne dla Twojego tokena dostępu, kliknij przycisk „dostępne pliki danych”.
Przykładowe zapytanie: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

Ten przykład zwraca maksymalnie 3 posty na określonym blogu. Możesz też wyświetlić zwrócony kanał lub wpis bezpośrednio w przeglądarce, klikając link „Wyświetl w przeglądarce” pod obszarem z podświetloną składnią.
Przykład: jak zaktualizować posta
- W poście, który chcesz zaktualizować, znajdź element
<link>
z ikoną rel="edit". Powinien wyglądać podobnie do następującego:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
Wklej URL href w polu „Wpisz plik danych Google”.
- Skopiuj XML istniejącego wpisu, klikając „view plain” (wyświetl zwykły tekst) u góry panelu z wyróżnioną składnią. Skopiuj tylko treść odpowiedzi, a nie nagłówki.
- W menu Metoda HTTP wybierz
PUT
. - Pod tym menu kliknij „enter post data” (wpisz dane posta) i wklej w wyskakującym okienku kod
<entry>
XML. - Kliknij przycisk „Wykonaj”.
Serwer odpowie 200 OK
.
Wskazówka: zamiast ręcznie kopiować link edit
, odznacz pole wyboru „Podświetlanie składni?”. Po wysłaniu zapytania możesz kliknąć linki w treściach odpowiedzi XML.
Podsumowanie
Technologie takie jak AtomPub/Atom Publishing Protocol (protokół bazowy interfejsów Google Data API) i OAuth pomagają rozwijać internet. W miarę jak coraz więcej witryn zaczyna stosować te standardy, my, deweloperzy, zyskujemy. Stworzenie przełomowej aplikacji staje się nagle mniej zniechęcające.
Jeśli masz pytania lub uwagi dotyczące OAuth Playground albo korzystania z OAuth w interfejsach API Google, odwiedź forum pomocy dotyczące interfejsów API G Suite i interfejsów API Marketplace.