Każda integracja z Cloud-to-cloud musi zawierać mechanizm uwierzytelniania użytkowników.
Uwierzytelnianie umożliwia Ci łączenie kont Google użytkowników z kontami użytkowników w Twoim systemie uwierzytelniania. Dzięki temu możesz zidentyfikować użytkowników, gdy usługa otrzyma intencję dotyczącą inteligentnego domu. Usługi Google smart home obsługują protokół OAuth tylko z użyciem procesu kodu autoryzacji.
Na tej stronie opisaliśmy, jak skonfigurować serwer OAuth 2.0, aby współpracował z integracją Cloud-to-cloud.
Łączenie konta Google przez OAuth
W przepływie kod autoryzacji potrzebujesz 2 punkty końcowe:
Punkt końcowy autoryzacji, który wyświetla interfejs logowania użytkownikom, którzy nie są jeszcze zalogowani. Punkt końcowy autoryzacji tworzy też krótkotrwały kod autoryzacji, aby zarejestrować zgodę użytkowników na żądany dostęp.
Punkt końcowy wymiany tokenów, który odpowiada za 2 rodzaje wymiany:
- Wymiana kodu autoryzacji na długoterminowy token odświeżania i krótkoterminowy token dostępu. Wymiana ta następuje, gdy użytkownik przechodzi przez proces łączenia kont.
- Wymiana długoterminowego tokena odświeżania na krótkoterminowy token dostępu. Wymiana następuje, gdy Google potrzebuje nowego tokenu dostępu, ponieważ poprzedni wygasł.
Wskazówki dotyczące wyglądu
W tej sekcji znajdziesz wymagania dotyczące projektu i zalecenia dotyczące ekranu użytkownika, który hostujesz w ramach procesów łączenia OAuth. Gdy wywoła go aplikacja Google, Twoja platforma wyświetli użytkownikowi stronę logowania do Google i ekran z prośbą o zgodę na połączenie kont. Po wyrażeniu zgody na połączenie kont użytkownik zostaje przekierowany z powrotem do aplikacji Google.

Wymagania
- Musisz poinformować, że konto użytkownika zostanie połączone z Google, a nie z konkretną usługą Google, taką jak Google Home czy Asystent Google.
- Musisz mieć oświadczenie Google, takie jak „Logując się, zezwalasz Google na kontrolowanie Twoich urządzeń”. Zapoznaj się z sekcją Zezwalanie na kontrolę urządzenia Google w zasadach dla deweloperów Google Home.
- Musisz otworzyć stronę łączenia OAuth w internecie i zadbać o to, aby użytkownicy mieli jasną metodę logowania się na konto Google, np. pola na nazwę użytkownika i hasło. Nie używaj metody logowania w Google (GSI), która umożliwia użytkownikom łączenie się bez przechodzenia na stronę łączenia z użyciem protokołu OAuth w internecie. Stanowi to naruszenie zasad Google.
Rekomendacje
Zalecamy wykonanie tych czynności:
Wyświetlanie Polityki prywatności Google Dodaj na ekranie zgody link do Polityki prywatności Google.
Dane do udostępnienia. Używaj jasnego i zwięzłego języka, aby poinformować użytkownika, jakich jego danych wymaga Google i dlaczego.
Jednoznaczne wezwanie do działania. Na ekranie z prośbą o zgodę umieść wyraźne wezwanie do działania, np. „Zgadzam się i połącz”. Użytkownicy muszą wiedzieć, jakie dane muszą udostępnić Google, aby połączyć swoje konta.
Możliwość anulowania. Zapewnij użytkownikom możliwość powrotu do poprzedniego ekranu lub anulowania połączenia.
Jednoznaczny proces logowania. Zadbaj o to, aby użytkownicy mieli jasną metodę logowania się na swoje konto Google, np. pola na nazwę użytkownika i hasło lub przycisk Zaloguj się przez Google.
Możliwość odłączenia. Udostępnij użytkownikom mechanizm umożliwiający odłączenie konta, np. adres URL do ustawień konta na Twojej platformie. Możesz też dodać link do konta Google, na którym użytkownicy mogą zarządzać połączonym kontem.
Możliwość zmiany konta użytkownika. Zaproponuj użytkownikom sposób przełączania kont. Jest to szczególnie korzystne, jeśli użytkownicy mają tendencję do tworzenia wielu kont.
- Jeśli użytkownik musi zamknąć ekran zgody, aby przełączyć konta, prześlij do Google nieodwracalny błąd, aby użytkownik mógł zalogować się na odpowiednie konto za pomocą łączenia OAuth.
Dodaj logo. Wyświetlać logo firmy na ekranie zgody. Użyj wytycznych dotyczących stylu, aby umieścić logo. Jeśli chcesz wyświetlać też logo Google, zapoznaj się z artykułem Logotypy i znaki towarowe.

Przepływ kodu autoryzacji
Implementacja serwera OAuth 2.0 przepływu kodu autoryzacji składa się z 2 punktów końcowych, które usługa udostępnia przez HTTPS. Pierwszy punkt końcowy to punkt końcowy autoryzacji, który odpowiada za znajdowanie lub uzyskiwanie zgody użytkowników na dostęp do danych. Punkt autoryzacji wyświetla interfejs logowania użytkownikom, którzy nie są jeszcze zalogowani, i rejestruje zgodę na żądany dostęp. Drugi punkt końcowy to punkt końcowy wymiany tokenów, który służy do uzyskiwania zaszyfrowanych ciągów znaków, zwanych tokenami, które autoryzują użytkownika do uzyskiwania dostępu do Twojej usługi.
Gdy aplikacja Google musi wywołać jeden z interfejsów API Twojej usługi, używa tych punktów końcowych, aby uzyskać od użytkowników pozwolenie na wywoływanie tych interfejsów API w ich imieniu.
Sesja przepływu kodu autoryzacji OAuth 2.0 zainicjowana przez Google przebiega w ten sposób:
- Google otwiera punkt końcowy autoryzacji w przeglądarce użytkownika. Jeśli przepływ został rozpoczęty na urządzeniu obsługującym tylko głos w przypadku działania, Google przenosi wykonanie na telefon.
- Użytkownik loguje się (jeśli nie jest jeszcze zalogowany) i przyznaje Google uprawnienia dostępu do swoich danych za pomocą Twojego interfejsu API (jeśli nie zrobił tego wcześniej).
- Usługa tworzy kod autoryzacji i zwraca go do Google. Aby to zrobić, przekieruj przeglądarkę użytkownika z powrotem do Google z kodem autoryzacji dołączonym do żądania.
- Google wysyła kod autoryzacji do punktu końcowego wymiany tokenów, który weryfikuje autentyczność kodu i zwraca token dostępu oraz token odświeżania. Token dostępu to krótkoterminowy token, który Twoja usługa akceptuje jako dane logowania umożliwiające dostęp do interfejsów API. Token odświeżania to token o długim okresie ważności, który Google może przechowywać i wykorzystywać do uzyskiwania nowych tokenów dostępu po wygaśnięciu poprzednich.
- Po zakończeniu procesu łączenia kont przez użytkownika każde kolejne żądanie wysyłane z Google zawiera token dostępu.
Obsługa próśb o autoryzację
Gdy musisz połączyć konta za pomocą przepływu kodu autoryzacji OAuth 2.0, Google przekierowuje użytkownika do Twojego punktu końcowego autoryzacji z żądaniem zawierającym te parametry:
Parametry punktu końcowego autoryzacji | |
---|---|
client_id |
Identyfikator klienta przypisany do Google. |
redirect_uri |
Adres URL, na który wysyłasz odpowiedź na to żądanie. |
state |
Wartość księgowa, która jest przekazywana z powrotem do Google bez zmian w identyfikatorze URI przekierowania. |
scope |
Opcjonalnie: zestaw ciągów tekstowych zakresu oddzielonych spacjami, które określają dane, do których Google prosi o autoryzację. |
response_type |
Typ wartości, która ma zostać zwrócona w odpowiedzi. W przypadku przepływu kodu autoryzacji OAuth 2.0 typ odpowiedzi to zawsze code .
|
Jeśli na przykład punkt końcowy autoryzacji jest dostępny pod adresem https://myservice.example.com/auth
, żądanie może wyglądać tak:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code
Aby punkt autoryzacji obsługiwał żądania logowania, wykonaj te czynności:
- Sprawdź, czy
client_id
odpowiada identyfikatorowi klienta przypisanemu do Google, aredirect_uri
– adresowi URL przekierowania podanemu przez Google dla Twojej usługi. Te kontrole są ważne, aby zapobiec przyznaniu dostępu nieodpowiednim lub nieprawidłowo skonfigurowanym aplikacjom klienckim. Jeśli obsługujesz wiele przepływów OAuth 2.0, sprawdź też, czy wartość parametruresponse_type
tocode
. - Sprawdź, czy użytkownik jest zalogowany w Twojej usłudze. Jeśli użytkownik nie jest zalogowany, wykonaj czynności konieczne, aby się zalogować lub zarejestrować w usłudze.
- Wygeneruj kod autoryzacji, którego Google będzie używać do uzyskiwania dostępu do Twojego interfejsu API. Kod autoryzacji może być dowolnym ciągiem znaków, ale musi jednoznacznie reprezentować użytkownika, klienta, dla którego przeznaczony jest token, i czas wygaśnięcia kodu, a także nie może być łatwy do odgadnięcia. Zazwyczaj wydajesz kody autoryzacji, które wygasają po około 10 minutach.
- Sprawdź, czy adres URL określony przez parametr
redirect_uri
ma następującą postać:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Przekierowuje przeglądarkę użytkownika na adres URL określony przez parametr
redirect_uri
. Podczas przekierowania dołącz wygenerowany kod autoryzacji i oryginalną, niezmienioną wartość stanu, dodając parametrycode
istate
. Oto przykład powstałego adresu URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Obsługa żądań wymiany tokenów
Punkt końcowy wymiany tokenów usługi odpowiada za 2 rodzaje wymiany tokenów:
- Wymiana kodów autoryzacji na tokeny dostępu i tokeny odświeżania
- Wymiana tokenów odświeżania na tokeny dostępu
Żądania wymiany tokenów zawierają te parametry:
Parametry punktu końcowego wymiany tokenów | |
---|---|
client_id |
Ciąg znaków, który identyfikuje źródło żądania jako Google. Ten ciąg znaków musi być zarejestrowany w Twoim systemie jako unikalny identyfikator Google. |
client_secret |
Tajny ciąg znaków zarejestrowany w Google w przypadku Twojej usługi. |
grant_type |
Rodzaj wymienianego tokena. Może to być authorization_code lub refresh_token . |
code |
Gdy wartość tego parametru to grant_type=authorization_code , jest to kod otrzymany przez Google z punktu końcowego logowania lub wymiany tokenów. |
redirect_uri |
Gdy grant_type=authorization_code , ten parametr jest adresem URL używanym w początkowym żądaniu autoryzacji. |
refresh_token |
Gdy grant_type=refresh_token , ten parametr jest tokenem odświeżania otrzymanym przez Google z punktu końcowego wymiany tokenów. |
Konfigurowanie sposobu wysyłania przez Google danych logowania na Twój serwer
W zależności od implementacji serwer autoryzacji oczekuje otrzymania danych logowania klienta w treści żądania lub w nagłówku żądania.
Domyślnie Google wysyła dane logowania w treści żądania. Jeśli serwer autoryzacji wymaga, aby dane logowania klienta znajdowały się w nagłówku żądania, musisz odpowiednio skonfigurować Cloud-to-cloud integrację:
Na liście projektów kliknij Otwórz obok projektu, nad którym chcesz pracować.
W sekcji Cloud-to-Cloud (Chmura do chmury) kliknij Develop (Twórz).
Kliknij Otwórz obok integracji.
Przewiń w dół do sekcji Uprawnienia (opcjonalnie) i zaznacz pole wyboru Przekazywanie przez Google identyfikatora klienta i klucza tajnego w nagłówku uwierzytelniania podstawowego HTTP.
Kliknij Zapisz, aby zapisać zmiany.
Wymiana kodów autoryzacji na tokeny dostępu i tokeny odświeżania
Gdy użytkownik się zaloguje, a Twój punkt końcowy autoryzacji zwróci do Google krótkoterminowy kod autoryzacji, Google wyśle żądanie do Twojego punktu końcowego wymiany tokenów, aby wymienić kod autoryzacji na token dostępu i token odświeżania.
W przypadku tych żądań wartość parametru grant_type
to authorization_code
, a wartość parametru code
to wartość kodu autoryzacji, który został wcześniej przyznany Google. Oto przykład żądania wymiany kodu autoryzacji na token dostępu i token odświeżania:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Aby wymienić kody autoryzacji na token dostępu i token odświeżania, punkt końcowy wymiany tokenów odpowiada na żądania POST
, wykonując te czynności:
- Sprawdź, czy parametr
client_id
wskazuje, że żądanie pochodzi z autoryzowanego źródła, a parametrclient_secret
ma oczekiwaną wartość. - Sprawdź, czy kod autoryzacji jest ważny i nie wygasł oraz czy identyfikator klienta podany w żądaniu jest zgodny z identyfikatorem klienta powiązanym z kodem autoryzacji.
- Sprawdź, czy adres URL określony przez parametr
redirect_uri
jest identyczny z wartością używaną w początkowym żądaniu autoryzacji. - Jeśli nie możesz potwierdzić wszystkich powyższych kryteriów, zwróć błąd HTTP 400 Bad Request z
{"error": "invalid_grant"}
w treści. - W przeciwnym razie użyj identyfikatora użytkownika z kodu autoryzacji, aby wygenerować token odświeżania i token dostępu. Tokeny mogą mieć dowolną wartość ciągu znaków, ale muszą jednoznacznie reprezentować użytkownika i klienta, dla którego są przeznaczone, oraz nie mogą być możliwe do odgadnięcia. W przypadku tokenów dostępu zapisz też czas wygaśnięcia tokena, który zwykle przypada godzinę po jego wydaniu. Tokeny odświeżania nie mają daty ważności.
- W treści odpowiedzi HTTPS zwróć ten obiekt JSON:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google przechowuje token dostępu i token odświeżania użytkownika oraz rejestruje datę wygaśnięcia tokena dostępu. Gdy token dostępu wygaśnie, Google użyje tokena odświeżania, aby uzyskać nowy token dostępu z punktu końcowego wymiany tokenów.
Wymiana tokenów odświeżania na tokeny dostępu
Gdy token dostępu wygaśnie, Google wyśle żądanie do punktu końcowego wymiany tokenów, aby wymienić token odświeżania na nowy token dostępu.
W przypadku tych żądań wartość grant_type
to refresh_token
, a wartość refresh_token
to wartość tokena odświeżania, który został wcześniej przyznany Google. Oto przykład żądania wymiany tokena odświeżania na token dostępu:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Aby wymienić token odświeżania na token dostępu, punkt końcowy wymiany tokenów
odpowiada na żądania POST
, wykonując te czynności:
- Sprawdź, czy
client_id
wskazuje, że żądanie pochodzi z Google, aclient_secret
ma oczekiwaną wartość. - Sprawdź, czy token odświeżania jest prawidłowy i czy identyfikator klienta podany w żądaniu jest zgodny z identyfikatorem klienta powiązanym z tokenem odświeżania.
- Jeśli nie możesz potwierdzić wszystkich powyższych kryteriów, zwróć błąd HTTP 400 Bad Request z treścią
{"error": "invalid_grant"}
. - W przeciwnym razie użyj identyfikatora użytkownika z tokena odświeżania, aby wygenerować token dostępu. Tokeny mogą mieć dowolną wartość ciągu znaków, ale muszą jednoznacznie reprezentować użytkownika i klienta, dla którego są przeznaczone, oraz nie mogą być możliwe do odgadnięcia. W przypadku tokenów dostępu zapisz też czas wygaśnięcia tokena, zwykle godzinę po jego wydaniu.
- W treści odpowiedzi HTTPS zwróć ten obiekt JSON:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Obsługa żądań informacji o użytkowniku
Punkt końcowy informacji o użytkowniku jest chronionym przez OAuth 2.0 zasobem, który zwraca deklaracje dotyczące połączonego użytkownika. Wdrożenie i hosting punktu końcowego informacji o użytkowniku jest opcjonalne. Wyjątkiem są te przypadki użycia:
- Logowanie się na połączone konto za pomocą Google One Tap
- Bezproblemowa subskrypcja na AndroidTV.
Po pobraniu tokena dostępu z punktu końcowego tokena Google wysyła żądanie do punktu końcowego informacji o użytkowniku, aby pobrać podstawowe informacje profilowe połączonego użytkownika.
nagłówki żądań punktu końcowego informacji o użytkowniku | |
---|---|
Authorization header |
Token dostępu typu okaziciela. |
Jeśli na przykład punkt końcowy informacji o użytkowniku jest dostępny pod adresem
https://myservice.example.com/userinfo
, żądanie może wyglądać tak:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Aby punkt końcowy informacji o użytkowniku mógł obsługiwać żądania, wykonaj te czynności:
- Wyodrębnij token dostępu z nagłówka autoryzacji i zwróć informacje o użytkowniku powiązanym z tym tokenem.
- Jeśli token dostępu jest nieprawidłowy, zwróć błąd HTTP 401 (Brak autoryzacji) i użyj nagłówka odpowiedzi
WWW-Authenticate
. Poniżej znajduje się przykładowa odpowiedź na pytanie o błąd w informacjach o użytkowniku:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Jeśli podczas procesu łączenia pojawi się błąd 401 (Brak autoryzacji) lub inna nieudana próba połączenia, błędu nie będzie można odzyskać, pobrany token zostanie odrzucony, a użytkownik będzie musiał ponownie zainicjować proces łączenia. Jeśli token dostępu jest prawidłowy, zwróć odpowiedź HTTP 200 z podanym niżej obiektem JSON w treści HTTPS odpowiedź:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
Jeśli punkt końcowy informacji o użytkowniku zwraca odpowiedź HTTP 200, pobrany token i żądania są rejestrowane dla konta Google użytkownika.odpowiedź dotycząca punktu końcowego informacji o użytkowniku sub
Unikalny identyfikator, który identyfikuje użytkownika w Twoim systemie. email
Adres e-mail użytkownika. given_name
Opcjonalnie: imię użytkownika. family_name
Opcjonalnie: nazwisko użytkownika. name
Opcjonalnie: pełna nazwa użytkownika. picture
Opcjonalnie: zdjęcie profilowe użytkownika.