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:
- Masz implementację łączenia konta Google z protokołem OAuth, która obsługuje proces autoryzacji z użyciem kodu OAuth 2.0. Implementacja OAuth musi zawierać te punkty końcowe:
- punkt końcowy autoryzacji do obsługi próśb o autoryzację.
- punkt końcowy tokena do obsługi żądania tokenów dostępu i odświeżania.
- Punkt końcowy userinfo służy do pobierania podstawowych informacji o połączonym koncie użytkownika, które są wyświetlane użytkownikowi podczas procesu logowania na połączone konto.
- masz aplikację na Androida.
Jak to działa
Warunek wstępny : użytkownik musi mieć wcześniej połączone swoje konto Google z kontem w Twojej usłudze.
- Podczas procesu logowania się za pomocą jednego kliknięcia możesz wyrazić zgodę na wyświetlanie połączonych kont.
- Użytkownik zobaczy prośbę o zalogowanie się jednym dotknięciem z opcją zalogowania się w usłudze za pomocą powiązanego konta.
- 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.
- Kod autoryzacji Google zamieniasz na token identyfikatora Google, który zawiera informacje o koncie Google użytkownika.
- 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.](https://developer.android.google.cn/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=pl)
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 przezclient_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