Łączenie kont za pomocą protokołu OAuth

Typ łączenia OAuth obsługuje 2 standardowe przepływy OAuth 2.0: niejawnyautoryzacji.

W pośrednim przepływie kodu Google otwiera punkt końcowy autoryzacji w przeglądarce użytkownika. Po udanym logowaniu zwracasz token dostępu o długim czasie do Google. Ten token dostępu jest teraz dołączany do każdego żądania wysyłanego przez Asystenta do działania.

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

  • Punkt końcowy autoryzacji, który odpowiada za wyświetlanie interfejsu logowania użytkownikom, którzy nie są jeszcze zalogowani, i rejestrowanie zgody w żądanym terminie w postaci kodu o ograniczonym czasie ważności.
  • Punkt końcowy giełdy tokenów odpowiedzialny za 2 typy giełd:
    1. Wymienia kod autoryzacji tokena długoterminowego i tokena dostępu o ograniczonym czasie ważności. Ta wymiana ma miejsce, gdy użytkownik przechodzi przez proces łączenia kont.
    2. Wymienia długotrwały token odświeżania na token dostępu o ograniczonym czasie ważności. Ta giełda ma miejsce, gdy Google potrzebuje nowego tokena dostępu, ponieważ wygasł.

Implementacja niejawnego przepływu kodu jest prostsza, ale Google zaleca, aby tokeny dostępu wydane z wykorzystaniem niejawnego przepływu nigdy nie wygasały, ponieważ korzystanie z tożsamości w wyniku takiego działania wymusza na użytkowniku ponowne połączenie konta. Jeśli ze względów bezpieczeństwa zależy Ci na wygaśnięciu tokena, rozważ użycie kodu uwierzytelniania.

Wdrażanie połączenia konta przez protokół OAuth

Konfigurowanie projektu

Aby skonfigurować projekt do korzystania z łączenia OAuth, wykonaj te czynności:

  1. Otwórz Konsolę Actions i wybierz projekt, którego chcesz użyć.
  2. Kliknij kartę Tworzenie i wybierz Łączenie kont.
  3. Włącz przełącznik obok opcji Powiązanie kont.
  4. W sekcji Tworzenie konta wybierz Nie, chcę zezwolić na tworzenie kont tylko w mojej witrynie.

  5. W sekcji Typ połączenia wybierz OAuthPośredni.

  6. W sekcji Informacje o kliencie:

    • Przypisz wartość do pola Identyfikator klienta wydany przez Twoje działania w Google, aby identyfikować żądania pochodzące z Google.
    • Wstaw adresy URL punktów końcowych autoryzacji i wymiany tokenów.
  1. Kliknij Zapisz.

Wdrażanie serwera OAuth

Aby obsługiwać niejawny przepływ 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 akcja musi wywołać jeden z autoryzowanych interfejsów API usługi, Google używa ten punkt końcowy, aby uzyskać od użytkowników uprawnienia do wywoływania tych interfejsów API w imieniu Google.

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ę, jeśli jeszcze nie jest zalogowany, i zezwala Google na dostęp swoich danych za pomocą interfejsu API, jeśli nie udzielili jeszcze zgody.
  2. Usługa tworzy token dostępu i zwraca go do Google przez przekierowanie przeglądarki użytkownika z powrotem do Google wraz z tokenem dostępu. 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

Jeśli akcja musi połączyć konta przez niejawny przepływ OAuth 2.0, Google wysyła użytkownika do punktu końcowego autoryzacji z żądaniem zawierającym ciąg następujące 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.

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

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

  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
      YOUR_PROJECT_ID to identyfikator, który znajdziesz na stronie Ustawienia projektu w Konsoli Actions.
  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ć, aby uzyskiwać dostęp 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 właśnie przez Ciebie 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 otrzyma token dostępu i potwierdzi że wartość state się nie zmieniła. Po uzyskaniu przez Google dla Twojej usługi, Google będzie dołączać ten token do kolejnych wywołań do akcji w ramach żądania AppRequest.

Zaprojektuj interfejs głosowy dla procesu uwierzytelniania.

Sprawdź, czy użytkownik jest zweryfikowany, i rozpocznij proces łączenia konta.

  1. Otwórz projekt w Actions Builder w konsoli Actions.
  2. Utwórz nową scenę, aby rozpocząć łączenie kont w swojej akcji:
    1. Kliknij Sceny.
    2. Kliknij ikonę dodawania (+), aby dodać nową scenę.
  3. W nowo utworzonej scenie kliknij ikonę dodawania  obok Warunków.
  4. Dodaj warunek, który sprawdza, czy użytkownik powiązany z rozmową jest zweryfikowany. Jeśli weryfikacja się nie powiedzie, Akcja nie będzie mogła połączyć kont podczas rozmowy i powinna wrócić do udostępniania funkcji, które nie wymagają łączenia kont.
    1. W polu Enter new expression w sekcji Warunek wpisz tę logikę: user.verificationStatus != "VERIFIED"
    2. W sekcji Przejście wybierz scenę, która nie wymaga połączenia konta, lub scenę, która jest punktem wejścia do funkcji dostępnych tylko dla gości.

  1. Kliknij ikonę dodawania  obok pozycji Warunki.
  2. Dodaj warunek, który uruchomi proces łączenia kont, jeśli użytkownik nie ma powiązanej tożsamości.
    1. W polu Enter new expression w sekcji Warunek wpisz tę logikę:user.verificationStatus == "VERIFIED"
    2. W sekcji Przejście wybierz scenę systemową Łączenie kont.
    3. Kliknij Zapisz.

Po zapisaniu do projektu zostanie dodana nowa scena systemu łączenia kont o nazwie <SceneName>_AccountLinking.

Dostosowywanie sceny łączenia kont

  1. W sekcji Sceny wybierz scenę systemu łączenia kont.
  2. Kliknij Wyślij prompt i dodaj krótkie zdanie, aby wyjaśnić użytkownikowi, dlaczego działanie potrzebuje dostępu do jego tożsamości (np. „Aby zapisać Twoje ustawienia”).
  3. Kliknij Zapisz.

  1. W sekcji Warunki kliknij Jeśli użytkownik pomyślnie połączy konta.
  2. Skonfiguruj, jak ma przebiegać proces, jeśli użytkownik zgodzi się na połączenie konta. Możesz na przykład wywołać webhooka, aby przetworzyć dowolną niestandardową logikę biznesową i wrócić do pierwotnej sceny.
  3. Kliknij Zapisz.

  1. W sekcji Warunki kliknij Jeśli użytkownik anuluje połączenie konta lub je odrzuci.
  2. Skonfiguruj, jak ma przebiegać proces, jeśli użytkownik nie zgodzi się na połączenie konta. Możesz na przykład wysłać wiadomość z potwierdzeniem i przekierować użytkownika do scen, które zapewniają funkcje niewymagające połączenia kont.
  3. Kliknij Zapisz.

  1. W sekcji Warunki kliknij Jeśli wystąpi błąd systemu lub sieci.
  2. Skonfiguruj, jak ma przebiegać proces, jeśli nie można go ukończyć z powodu błędów systemu lub sieci. Możesz na przykład wysłać wiadomość z potwierdzeniem i przekierować użytkownika do scen, które zapewniają funkcje niewymagające połączenia kont.
  3. Kliknij Zapisz.

Obsługa próśb o dostęp do danych

Jeśli żądanie Asystenta zawiera token dostępu, najpierw sprawdź, czy jest on prawidłowy (i nie wygasł), a następnie pobierz powiązane konto użytkownika z bazy danych.