Logowanie na powiązane konto

Połączenie z kontem Google umożliwia właścicielom kont Google szybkie, bezproblemowe i bezpieczne łączenie się z Twoimi usługami oraz udostępnianie danych Google.

Logowanie za pomocą połączonego konta umożliwia logowanie jednym dotknięciem za pomocą Google użytkownikom, którzy mają już połączone swoje konto Google z Twoją usługą. Dzięki temu użytkownicy mogą logować się jednym kliknięciem, bez konieczności ponownego wpisywania nazwy użytkownika i hasła. Zmniejsza też prawdopodobieństwo, że użytkownicy będą tworzyć zduplikowane konta w Twojej usłudze.

Wymagania

Aby zaimplementować logowanie na połączonym koncie, musisz spełniać te wymagania:

Jak to działa

Warunek wstępny : użytkownik musi mieć wcześniej połączone swoje konto Google z kontem w Twojej usłudze.

  1. Podczas procesu logowania się za pomocą jednego kliknięcia możesz wyrazić zgodę na wyświetlanie połączonych kont.
  2. Użytkownik zobaczy prośbę o zalogowanie się jednym dotknięciem z opcją zalogowania się w usłudze za pomocą powiązanego konta.
  3. Jeśli użytkownik zdecyduje się kontynuować korzystanie z połączonego konta, Google wyśle żądanie do punktu końcowego tokena w Twojej usłudze, aby zapisać kod autoryzacji. Żądanie zawiera token dostępu użytkownika wystawiony przez Twoją usługę i kod autoryzacji Google.
  4. Kod autoryzacji Google zamieniasz na token identyfikatora Google, który zawiera informacje o koncie Google użytkownika.
  5. Po zakończeniu procesu aplikacja otrzymuje też token identyfikacyjny. Po jej zakończeniu możesz dopasować go do identyfikatora użytkownika w tokenie identyfikacyjnym otrzymanym przez serwer, aby zalogować użytkownika w aplikacji.
Logowanie na połączone konto.
Rysunek 1. Proces logowania na połączone konto. Jeśli użytkownik ma na urządzeniu kilka kont, może zobaczyć selektor kont i zostanie przekierowany do widoku logowania na powiązane konto tylko wtedy, gdy wybierze to konto.

Wdrażanie logowania na połączone konto w aplikacji na Androida

Aby umożliwić logowanie się na połączone konto w aplikacji na Androida, wykonaj instrukcje podane w przewodniku po implementacji na Androida.

Obsługa próśb o kod autoryzacji od Google

Google wysyła żądanie POST do punktu końcowego tokena, aby zapisać kod autoryzacji, który wymieniasz na token identyfikatora użytkownika. Żądanie zawiera token dostępu użytkownika i wydawany przez Google kod autoryzacji OAuth 2.

Zanim zapiszesz kod autoryzacji, musisz sprawdzić, czy token dostępu został przyznany przez Ciebie Google i czy jest identyfikowany przez 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 wymiany tokenów musi obsługiwać te parametry żądania:

Parametry punktu końcowego tokena
code Wymagane: kod autoryzacji Google OAuth2
client_id Wymagany identyfikator klienta wydany przez Google
client_secret Wymagany tajny klucz klienta wydany przez Google
access_token Wymagany token dostępu wydany przez Google. Użyjesz go do uzyskania kontekstu użytkownika.
grant_type Wymagany – wartość MUSI być ustawiona na urn:ietf:params:oauth:grant-type:reciprocal.

Punkt końcowy wymiany tokenów powinien odpowiedzieć na żądanie POST, wykonując te czynności:

  • Sprawdź, czy access_token została przyznana Google przez client_id.
  • W odpowiedzi na żądanie należy zwrócić kod HTTP 200 (OK), jeśli żądanie jest prawidłowe i kod autoryzacji został zamieniony na token identyfikatora Google, lub kod błędu HTTP, jeśli żądanie jest nieprawidłowe.

Odpowiedź HTTP

Udało się

zwracać kod stanu HTTP 200 OK;

Przykładowa odpowiedź 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 odpowiedź zawiera jeden z tych kodów błędów HTTP:

Kod stanu HTTP Treść Opis
400 {"error": "invalid_request"} Brakuje parametru, więc serwer nie może zrealizować żądania. Może się to też zdarzyć, jeśli żądanie zawiera nieobsługiwany parametr lub powtarza parametr.
401 {"error": "invalid_request"} Nie udało się uwierzytelnić klienta, np. jeśli żądanie zawiera nieprawidłowy identyfikator lub tajny klucz klienta.
401 {"error": "invalid_token"}

Uwzględnij w nagłówku odpowiedzi wyzwanie uwierzytelniania „WWW-Authentication: Bearer”

Token dostępu partnera jest nieprawidłowy.
403 {"error": "insufficient_permission"}

Uwzględnij w nagłówku odpowiedzi wyzwanie uwierzytelniania „WWW-Authentication: Bearer”

Token dostępu partnera nie zawiera zakresów niezbędnych do wykonania odwrotnego wywołania OAuth
500 {"error": "internal_error"} Błąd serwera

Odpowiedź na błąd 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 informacji o błędzie
Przykładowa odpowiedź na 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 na token identyfikacyjny

Musisz zamienić otrzymany kod autoryzacji na token identyfikatora Google, który zawiera informacje o koncie Google użytkownika.

Aby wymienić kod autoryzacji na token Google ID, wywołaj punkt końcowy https://oauth2.googleapis.com/token i ustaw te parametry:

Pola żądania
client_id Wymagany identyfikator klienta uzyskany na stronie Dane logowania w konsoli interfejsu API. Zwykle są to dane logowania o nazwie Nowe akcje w aplikacji Google.
client_secret Wymagany: tajny klucz klienta uzyskany na stronie Dane logowania w konsoli interfejsu API.
code Wymagany kod autoryzacji wysłany w żądaniu początkowym
grant_type Wymagany zgodnie ze specyfikacją OAuth 2.0 wartość tego pola musi wynosić 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

W odpowiedzi na to żądanie Google zwraca obiekt JSON zawierający krótkotrwały token dostępu i token odświeżania.

Odpowiedź zawiera te pola:

Pola odpowiedzi
access_token Token dostępu wydany przez Google, który aplikacja wysyła, aby autoryzować żądanie interfejsu Google API.
id_token Zawiera on informacje o koncie Google użytkownika. W sekcji Weryfikuj odpowiedź znajdziesz szczegółowe informacje o tym, jak odkodować i zweryfikować odpowiedź tokena tożsamości.
expires_in Pozostały czas ważności tokena dostępu w sekundach
refresh_token Token, którego możesz użyć do uzyskania nowego tokena dostępu. Tokeny odświeżania są ważne do czasu, gdy użytkownik cofnie dostęp.
scope W przypadku logowania na połączone konto wartość tego pola zawsze wynosi openid.
token_type Typ zwróconego tokena. Obecnie wartość tego pola zawsze wynosi 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 tożsamości