Łączenie konta Google z protokołem OAuth

Konta są łączone przy użyciu standardowych przepływów protokołu OAuth 2.0 i kodu autoryzacji. Twoja usługa musi obsługiwać punkty końcowe autoryzacji zgodnej z protokołem OAuth 2.0 i punkty końcowe tokena.

W ramach procesu domyślnego Google otwiera punkt końcowy autoryzacji w przeglądarce użytkownika. Po udanym logowaniu zwracasz do Google token dostępu o dłuższej długości. Ten token dostępu jest teraz dołączany do każdego żądania wysyłanego przez Google.

W procesie kodu autoryzacji potrzebujesz 2 punktów końcowych:

  • Punkt końcowy autoryzacji, który wyświetla interfejs logowania użytkownikom, którzy jeszcze nie są zalogowani. Punkt końcowy autoryzacji tworzy też krótki kod autoryzacji do rejestrowania użytkowników i uzyskiwania zgody na żądany dostęp.

  • Punkt końcowy token Exchange, który jest odpowiedzialny za 2 typy giełd:

    1. Wymiana kodu autoryzacji dla długotrwałego tokenu odświeżania i krótkoterminowego tokena dostępu. Wymiana następuje, gdy użytkownik przeprowadzi proces łączenia kont.
    2. Wymiana tokenu odświeżania o długim czasie ważności na token dostępu o krótkim czasie ważności. Ta wymiana ma miejsce, gdy Google potrzebuje nowego tokena dostępu, ponieważ wygasł.

Wybierz przepływ OAuth 2.0

Chociaż procedura domyślna jest prostsza, zalecamy, by tokeny dostępu domyślnie ustały. Dzieje się tak, ponieważ użytkownik jest zmuszony ponownie połączyć swoje konto po wygaśnięciu tokena w wynikowy sposób. Jeśli ze względów bezpieczeństwa zależy Ci na wygaśnięciu tokena, zdecydowanie zalecamy użycie procesu kodu autoryzacji.

Wskazówki dotyczące wyglądu

W tej sekcji opisano wymagania projektowe i zalecenia dotyczące ekranu użytkownika hostowanego przez proces łączenia OAuth. Po wywołaniu jej przez aplikację Google na Twojej platformie wyświetla się ekran logowania na stronie Google, a użytkownik wyraża zgodę na połączenie konta. Gdy użytkownik wyrazi zgodę na połączenie kont, zostanie przekierowany z powrotem do aplikacji Google.

Ten wykres przedstawia czynności, jakie musi wykonać użytkownik, aby połączyć swoje konto Google z Twoim systemem uwierzytelniania. Pierwszy zrzut ekranu przedstawia linki inicjowane przez użytkownika na Twojej platformie. Drugi obraz przedstawia logowanie użytkownika w Google, a trzeci – zgodę użytkownika i jego potwierdzenie na potrzeby połączenia konta Google z aplikacją. Ostatni zrzut ekranu przedstawia połączone konto użytkownika w aplikacji Google.
Rysunek 1. Łączenie kont loguje się w Google i na ekranach zgody.

Wymagania

  1. 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.

Zalecenia

Zalecamy wykonanie tych czynności:

  1. Wyświetl Politykę prywatności Google Podaj na ekranie zgody link do Polityki prywatności Google.

  2. Dane do udostępnienia. Stosuj jasne i zwięzłe sformułowania, których użytkownik potrzebuje, i wyjaśnij, jakich danych Google potrzebuje i dlaczego.

  3. Stosuj jednoznaczne wezwania do działania. Jasno umieść wezwanie do działania na ekranie zgody, np. „Zgadzam się i łączę”. Użytkownicy muszą wiedzieć, jakie dane muszą udostępnić Google, by połączyć swoje konta.

  4. Możliwość anulowania. Zapewnij użytkownikom możliwość powrotu lub anulowania subskrypcji, jeśli nie chcą tworzyć linków.

  5. Przejrzysty proces logowania. Upewnij się, że użytkownicy mają wyraźną metodę logowania się na swoje konto Google, np. pola do wpisania nazwy użytkownika i hasła lub logowania się przez Google.

  6. Możliwość odłączenia. Udostępnij użytkownikom mechanizm odłączenia kont, na przykład URL do ustawień ich konta na Twojej platformie. Możesz też podać link do konta Google, na którym użytkownicy mogą zarządzać swoim połączonym kontem.

  7. Możliwość zmiany konta użytkownika. Zasugeruj użytkownikom zmianę swojego konta. Jest to szczególnie przydatne, gdy użytkownicy mają zwykle kilka kont.

    • Jeśli użytkownik musi zamknąć ekran zgody, aby przełączyć konta, wyślij do Google opis możliwego do odzyskania błędu, aby mógł zalogować się na wybrane konto przy użyciu łączenia OAuth i procesu domyślnego.
  8. Logo. Wyświetlaj logo swojej firmy na ekranie zgody. Umieść swoje logo zgodnie ze wskazówkami dotyczącymi stylu. Jeśli chcesz też wyświetlać logo Google, zobacz Logo i znaki towarowe.

Tworzenie projektu

Aby utworzyć projekt z funkcją łączenia kont:

  1. Go to the Google API Console.
  2. Kliknij Utwórz projekt .
  3. Wpisz nazwę lub zaakceptuj wygenerowaną sugestię.
  4. Potwierdź lub edytuj pozostałe pola.
  5. Kliknij Utwórz .

Aby wyświetlić identyfikator projektu:

  1. Go to the Google API Console.
  2. Znajdź swój projekt w tabeli na landing page. Identyfikator projektu pojawia się w kolumnie ID .

Proces łączenia kont Google obejmuje ekran zgody, na którym aplikacja prosi o dostęp do ich danych, rodzaj danych, o które proszą, oraz obowiązujące warunki. Przed wygenerowaniem identyfikatora klienta interfejsu API Google musisz skonfigurować ekran zgody OAuth.

  1. Otwórz stronę Ekran zgody OAuth w konsoli interfejsów API Google.
  2. Jeśli pojawi się taka prośba, wybierz właśnie utworzony projekt.
  3. Na stronie „Ekran zgody OAuth” wypełnij formularz i kliknij przycisk „Zapisz”.

    Nazwa aplikacji: nazwa aplikacji, która prosi o zgodę. Nazwa powinna dokładnie odzwierciedlać Twoją aplikację i być zgodna z nazwą, którą użytkownicy widzą w innych miejscach. Nazwa aplikacji będzie widoczna na ekranie zgody na łączenie kont.

    Logo aplikacji: obraz na ekranie zgody, który pomoże użytkownikom rozpoznać Twoją aplikację. Logo jest widoczne na ekranie zgody łączenia kont oraz w ustawieniach konta.

    Adres e-mail zespołu pomocy: umożliwia użytkownikom kontaktowanie się z Tobą w razie pytań o udzielenie zgody.

    Zakresy dla interfejsów API Google: zakresy umożliwiają aplikacji dostęp do prywatnych danych Google użytkownika. W przypadku łączenia kont Google wystarczy ustawić domyślny zakres (adres e-mail, profil, identyfikator openid) i nie musisz dodawać żadnych poufnych zakresów. Ogólnie sprawdzoną metodą jest stopniowe zgłaszanie żądań zakresów w momencie, gdy jest wymagany dostęp, a nie z góry. Więcej informacji

    Autoryzowane domeny: aby chronić Ciebie i Twoich użytkowników, Google zezwala na korzystanie z autoryzowanych domen tylko aplikacjom, które uwierzytelniają się za pomocą protokołu OAuth. Linki Twoich aplikacji muszą być hostowane w autoryzowanych domenach. Więcej informacji

    Link do strony głównej aplikacji: strona główna Twojej aplikacji. Musi być hostowany w autoryzowanej domenie.

    Link do polityki prywatności aplikacji: wyświetlany na ekranie zgody dotyczącej łączenia konta Google. Musi być hostowany w autoryzowanej domenie.

    Link do Warunków korzystania z usługi (opcjonalny): musi być hostowany w autoryzowanej domenie.

    Rysunek 1. Ekran ze zgodą na łączenie konta Google dla fikcyjnej aplikacji, Tunery

  4. Sprawdź „Stan weryfikacji”, jeśli zgłoszenie wymaga weryfikacji, a następnie kliknij przycisk „Prześlij do weryfikacji”, aby przesłać zgłoszenie do weryfikacji. Szczegółowe informacje znajdziesz w artykule Wymagania dotyczące weryfikacji OAuth.

Implementowanie serwera OAuth

Aby obsługiwać przepływ niejawny OAuth 2.0, Twoja usługa wymaga autoryzacji punktu końcowego dostępnego przez HTTPS. Ten punkt końcowy odpowiada za uwierzytelnianie i uzyskiwania od użytkowników zgody na dostęp do danych. Punkt końcowy autoryzacji wyświetla interfejs logowania użytkownikom, którzy nie są jeszcze zalogowani, wyrazić zgodę na żądany dostęp.

Gdy aplikacja Google musi wywołać jeden z autoryzowanych interfejsów API Twojej usługi, Google używa tego punktu końcowego, aby uzyskać od użytkowników uprawnienia do wywoływania tych interfejsów API w ich imieniu.

Typowa sesja niejawnego przepływu zainicjowana przez Google w języku OAuth 2.0 ma następujący przepływ:

  1. Google otworzy punkt końcowy autoryzacji w przeglądarce użytkownika. loguje się użytkownik, jeśli jeszcze nie jest zalogowany, i zezwala Google na uzyskać dostęp do swoich danych za pomocą Twojego interfejsu API, jeśli nie przyznał on jeszcze odpowiednich uprawnień.
  2. Usługa tworzy token dostępu i zwraca go do Google. W tym celu przekieruj przeglądarkę użytkownika z powrotem do Google z odpowiednim dostępem token dołączony do żądania.
  3. Google wywołuje interfejsy API Twojej usługi i łączy token dostępu z każdego żądania. Usługa sprawdza, czy token dostępu przyznaje Google aby uzyskać dostęp do interfejsu API, a następnie wykonać jego wywołanie.

Obsługa żądań autoryzacji

Gdy aplikacja Google musi łączyć konta przy użyciu protokołu OAuth 2.0 niejawna, Google wysyła użytkownika do punktu końcowego autoryzacji ze znakiem , które zawiera te parametry:

Parametry punktu końcowego autoryzacji
client_id Identyfikator klienta przypisany przez Ciebie do Google.
redirect_uri Adres URL, na który została wysłana odpowiedź na to żądanie.
state wartości księgowej, która jest przesyłana do Google bez zmian w identyfikator URI przekierowania.
response_type Typ wartości do zwrócenia w odpowiedzi. W przypadku protokołu OAuth 2.0 implicit przepływu, typ odpowiedzi to zawsze token.
user_locale Ustawienia języka konta Google w RFC5646 używany do zlokalizowania treści na język preferowany przez użytkownika.

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&response_type=token&user_locale=LOCALE

Aby punkt końcowy autoryzacji mógł obsługiwać żądania logowania, wykonaj te czynności kroki:

  1. Sprawdź wartości client_id i redirect_uri w zapobiegaj przyznawaniu dostępu do niezamierzonych lub błędnie skonfigurowanych aplikacji klienckich:

    • Sprawdź, czy identyfikator client_id jest zgodny z Twoim identyfikatorem klienta przypisane do Google.
    • Sprawdź, czy URL podany w pliku redirect_uri ma taką postać:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Sprawdź, czy użytkownik jest zalogowany w Twojej usłudze. Jeśli użytkownik nie jest zalogowany dokończ proces logowania lub rejestracji w usłudze.

  3. Wygeneruj token dostępu, którego Google będzie używać do uzyskiwania dostępu do Twojego interfejsu API. token dostępu może być dowolną wartością ciągu, ale musi jednoznacznie reprezentować i klienta, dla którego jest przeznaczony token, i nie może być odgadywany.

  4. Wyślij odpowiedź HTTP przekierowującą przeglądarkę użytkownika na ten adres URL wskazywaną przez parametr redirect_uri. Uwzględnij wszystkie następujące parametry we fragmencie adresu URL:

    • access_token: wygenerowany przed chwilą token dostępu.
    • token_type: ciąg znaków bearer
    • state: niezmodyfikowana wartość stanu pierwotnego, prośba

    Oto przykład powstałego adresu URL:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Moduł obsługi przekierowań OAuth 2.0 od Google otrzymuje token dostępu i potwierdza że wartość state się nie zmieniła. Po uzyskaniu przez Google token dostępu do Twojej usługi, Google będzie dołączać go do kolejnych wywołań do interfejsów API Twojej usługi.

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:

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:

  1. Wyodrębnij token dostępu z nagłówka autoryzacji i zwróć informacje o użytkowniku powiązanym z tym tokenem.
  2. 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.
  3. 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.

Sprawdzanie poprawności implementacji

Można sprawdzić poprawność implementacji za pomocą OAuth 2.0 Playground narzędzia.

W narzędziu wykonaj następujące czynności:

  1. Kliknij konfiguracji , aby otworzyć okno konfiguracji OAuth 2.0.
  2. W dziedzinie przepływu OAuth, wybierz Client-side.
  3. W polu OAuth Endpoints wybierz Niestandardowy.
  4. W odpowiednich polach określ punkt końcowy OAuth 2.0 i identyfikator klienta przypisany do Google.
  5. W sekcji Krok 1, nie zaznaczaj żadnych zakresów Google. Zamiast tego pozostaw to pole puste lub wpisz zakres poprawny dla Twojego serwera (lub dowolny ciąg, jeśli nie używasz zakresów OAuth). Kiedy skończysz, kliknij autoryzacji API.
  6. W etapie 2 i etapem 3 części, przechodzą przepływu OAuth 2.0 i upewnić się, że każdy etap działa zgodnie z zamierzeniem.

Można sprawdzić poprawność implementacji za pomocą konta Google Linking Demo narzędzia.

W narzędziu wykonaj następujące czynności:

  1. Kliknij Sign-in z przycisku Google.
  2. Wybierz konto, które chcesz połączyć.
  3. Wprowadź identyfikator usługi.
  4. Opcjonalnie wprowadź co najmniej jeden zakres, do którego poprosisz o dostęp.
  5. Kliknij Start Demo.
  6. Po wyświetleniu monitu potwierdź, że możesz wyrazić zgodę i odrzucić prośbę o połączenie.
  7. Potwierdź, że zostałeś przekierowany na swoją platformę.