Połączenie kont Google umożliwia właścicielom kont Google szybkie, bezproblemowe i bezpieczne łączenie się z Twoimi usługami oraz udostępnianie danych Google.
Logowanie na połączone konto włącza Logowanie przez Google jednym dotknięciem w przypadku użytkowników, którzy mają już konto Google połączone z Twoją usługą. Zwiększa to wygodę użytkowników, ponieważ mogą logować się jednym kliknięciem bez konieczności ponownego wpisywania swojej nazwy użytkownika i hasła. Zmniejsza to też ryzyko utworzenia zduplikowanych kont w Twojej usłudze.
Wymagania
Aby wdrożyć logowanie na połączone konto, musisz spełniać następujące wymagania:
- Masz implementację łączenia przez OAuth konta Google, która obsługuje przepływ kodu autoryzacji OAuth 2.0. Implementacja protokołu OAuth musi obejmować te punkty końcowe:
- punktu końcowego autoryzacji do obsługi żądań autoryzacji.
- tokenpoint do obsługi żądania dostępu i tokenów odświeżania.
- punkt końcowy informacji o użytkowniku, aby pobrać podstawowe informacje o połączonym koncie użytkownika, które są wyświetlane użytkownikowi podczas procesu logowania się na powiązane konto.
- Masz aplikację na Androida.
Jak to działa
Warunek wstępny : użytkownik wcześniej połączył swoje konto Google z kontem w Twojej usłudze.
- Wyrażasz zgodę na wyświetlanie połączonych kont podczas logowania jednym dotknięciem.
- Użytkownik widzi prośbę o logowanie jednym dotknięciem z opcją zalogowania się w Twojej usłudze za pomocą połączonego konta.
- Jeśli użytkownik zdecyduje się kontynuować korzystanie z połączonego konta, Google wyśle do punktu końcowego tokena żądanie zapisania kodu autoryzacji. Żądanie zawiera token dostępu użytkownika wydany przez Twoją usługę oraz kod autoryzacji Google.
- Wymieniasz kod autoryzacji Google na token identyfikatora Google, który zawiera informacje o koncie Google użytkownika.
- Aplikacja otrzymuje również token identyfikatora po zakończeniu procesu, który jest dopasowywany do identyfikatora użytkownika w tokenie ID otrzymanym przez serwer w celu zalogowania użytkownika w aplikacji.
Wdrażanie logowania na powiązane konto w aplikacji na Androida
Aby umożliwić logowanie się na połączone konto w aplikacji na Androida, postępuj zgodnie z instrukcjami w przewodniku po implementacji na Androidzie.
Obsługuj żądania kodu autoryzacji wysyłane przez Google
Google wysyła do punktu końcowego tokena żądanie POST, aby zapisać kod autoryzacji, który wymienisz na token identyfikatora użytkownika. Żądanie zawiera token dostępu użytkownika i wydany przez Google kod autoryzacji OAuth2.
Zanim zapiszesz kod autoryzacji, sprawdź, czy token dostępu został przez Ciebie przyznany Google przez Ciebie (identyfikator: client_id
).
Żądanie HTTP
Przykładowe żądanie
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
Punkt końcowy tokena wymiany musi obsługiwać te parametry żądania:
Parametry punktu końcowego tokena | |
---|---|
code |
Wymagany kod autoryzacji Google OAuth2 |
client_id |
Wymagany identyfikator klienta wydany przez Ciebie Google. |
client_secret |
Wymagany tajny klucz klienta przekazany do Google |
access_token |
Wymagany token dostępu wydany przez Ciebie. Pozwoli Ci to poznać kontekst użytkownika |
grant_type |
Wymagana: Wartość MUSI być ustawiona na urn:ietf:params:oauth:grant-type:reciprocal . |
Twój punkt końcowy wymiany tokenów powinien odpowiadać na żądanie POST, wykonując te czynności:
- Sprawdź, czy dokument
access_token
został przekazany Google zidentyfikowany przezclient_id
. - Jeśli żądanie jest prawidłowe, a kod autoryzacji został wymienionych na token identyfikatora Google, wyślij odpowiedź HTTP 200 (OK) lub kod błędu HTTP, jeśli żądanie jest nieprawidłowe.
Odpowiedź HTTP
Gotowe
Zwraca kod stanu HTTP 200 OK
Przykładowa odpowiedź z informacją o powodzeniu
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
Błędy
W przypadku nieprawidłowego żądania HTTP wyślij odpowiedź z jednego z tych kodów błędu HTTP:
Kod stanu HTTP | Treść | Opis |
---|---|---|
400 | {"error": "invalid_request"} |
W żądaniu brakuje parametru, więc serwer nie może go zrealizować. Ten kod może być też zwracany, jeśli żądanie zawiera nieobsługiwany parametr lub się powtarza. |
401 | {"error": "invalid_request"} |
Uwierzytelnienie klienta nie powiodło się, na przykład jeśli żądanie zawiera nieprawidłowy identyfikator klienta lub nieprawidłowy tajny klucz klienta. |
401 | {"error": "invalid_token"}
Umieść test uwierzytelniania „WWW-Authentication: Bearer” w nagłówku odpowiedzi |
Token dostępu partnera jest nieprawidłowy. |
403 | {"error": "insufficient_permission"}
Umieść test uwierzytelniania „WWW-Authentication: Bearer” w nagłówku odpowiedzi |
Token dostępu partnera nie zawiera zakresów wymaganych do wykonania wzajemnego protokołu OAuth |
500 | {"error": "internal_error"} |
Błąd serwera |
Odpowiedź o błędzie powinna zawierać te pola :
Pola odpowiedzi na błędy | |
---|---|
error |
Wymagany ciąg znaków błędu |
error_description |
Zrozumiały dla człowieka opis błędu |
error_uri |
Identyfikator URI zawierający więcej szczegółów o błędzie |
Przykładowy błąd 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
Wymiana kodu autoryzacji tokena tożsamości
Musisz wymienić otrzymany kod autoryzacji na token tożsamości Google, który zawiera informacje o koncie Google użytkownika.
Aby wymienić kod autoryzacji na token tożsamości Google, wywołaj punkt końcowy https://oauth2.googleapis.com/token
i ustaw te parametry:
Pola żądania | |
---|---|
client_id |
Wymagany Identyfikator klienta uzyskany ze strony Dane logowania w Konsoli interfejsów API. Zwykle są to dane logowania o nazwie New Actions on Google App (Nowe działania w aplikacji Google Actions on Google). |
client_secret |
Wymagany tajny klucz klienta uzyskany ze strony Dane logowania w konsoli API. |
code |
Wymagany – kod autoryzacji wysłany w pierwszym żądaniu. |
grant_type |
Wymagane Zgodnie ze specyfikacją OAuth 2.0 wartość tego pola musi być ustawiona na authorization_code . |
Przykładowe żądanie
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google odpowiada na to żądanie, zwracając obiekt JSON zawierający token dostępu krótkotrwałego i token odświeżania.
Odpowiedź zawiera te pola:
Pola odpowiedzi | |
---|---|
access_token |
Token dostępu wydany przez Google, który wysyła Twoja aplikacja, aby autoryzować żądanie do interfejsu API Google |
id_token |
Token tożsamości zawiera informacje o koncie Google użytkownika. Sekcja Weryfikacja odpowiedzi zawiera szczegółowe informacje o tym, jak zdekodować i zweryfikować odpowiedź tokena identyfikatora. |
expires_in |
Pozostały czas życia tokena dostępu w sekundach |
refresh_token |
Token, za pomocą którego możesz uzyskać nowy token dostępu. Tokeny odświeżania są ważne do chwili, gdy użytkownik unieważni dostęp |
scope |
W przypadku logowania na połączone konto wartość tego pola jest zawsze ustawiona na openid |
token_type |
Typ zwróconego tokena. Obecnie wartość tego pola jest zawsze ustawiona na Bearer |
Przykładowa odpowiedź
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret
Weryfikowanie odpowiedzi tokena identyfikatora
Sprawdź poprawność i zdekoduj asercję JWT
Potwierdzenie JWT można sprawdzić i zdekodować, używając biblioteki dekodującej JWT dla swojego języka . Użyj kluczy publicznych Google, dostępnych w formatach JWK lub PEM , aby zweryfikować podpis tokena.
Po zdekodowaniu asercja JWT wygląda jak w następującym przykładzie:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
Oprócz weryfikacji podpisu tokena sprawdź, czy wystawca potwierdzenia (pole iss
) to https://accounts.google.com
, czy odbiorca (pole aud
) to przypisany przez Ciebie identyfikator klienta oraz czy token nie wygasł ( exp
pole).
Korzystając z pól email
, email_verified
i hd
możesz określić, czy Google obsługuje adres e-mail i czy jest miarodajny. W przypadkach, gdy Google jest autorytatywnym użytkownikiem, wiadomo, że użytkownik jest prawowitym właścicielem konta i możesz pominąć hasło lub inne metody sprawdzania. W przeciwnym razie te metody mogą służyć do weryfikacji konta przed połączeniem.
Przypadki, w których Google jest autorytatywny:
-
email
ma przyrostek@gmail.com
, to jest konto Gmail. -
email_verified
ma wartość true i ustawionohd
, to jest konto G Suite.
Użytkownicy mogą rejestrować się na konta Google bez korzystania z Gmaila ani G Suite. Jeśli email
nie zawiera sufiksu @gmail.com
i nie ma hd
Google nie jest autorytatywny i zaleca się podanie hasła lub innych metod sprawdzania tożsamości w celu zweryfikowania użytkownika. email_verfied
może również mieć wartość true, ponieważ firma Google wstępnie zweryfikowała użytkownika podczas tworzenia konta Google, jednak własność konta e-mail innej firmy mogła ulec zmianie od tego czasu.