Biblioteka usług tożsamości Google umożliwia użytkownikom wysyłanie próśb o autoryzację z Google za pomocą wyskakującego okienka przeglądarki lub procesu UX. Ten rozpoczyna bezpieczny przepływ protokołu OAuth 2.0 i powoduje wyświetlenie tokena dostępu używanego do wywoływania interfejsów API Google w imieniu użytkownika.
Podsumowanie procesu autoryzacji OAuth 2.0:
- W przeglądarce, za pomocą gestu takiego jak kliknięcie przycisku, pojawi się konto Google właściciel prosi o kod autoryzacji do Google.
- Google odpowiada, wysyłając unikalny kod autoryzacji na wywołanie zwrotne aplikacja internetowa JavaScript działająca w przeglądarce użytkownika lub bezpośrednio wywołuje punktu końcowego kodu autoryzacji przez przekierowanie w przeglądarce.
- Platforma backendu hostuje punkt końcowy kodu autoryzacji i otrzymuje w kodzie. Po weryfikacji kod jest wymieniany na dostęp dla poszczególnych użytkowników. odświeżaj tokeny za pomocą żądania wysyłanego do punktu końcowego tokena Google.
- Google weryfikuje kod autoryzacji i potwierdza źródło żądania. z bezpiecznej platformy, wystawia tokeny dostępu i odświeża je, a następnie zwraca przez wywołanie punktu końcowego logowania hostowanego przez Twoją platformę.
- Punkt końcowy logowania otrzymuje tokeny dostępu i odświeżania, bezpiecznie przechowywane token odświeżania do późniejszego użycia.
Inicjowanie klienta kodu
Metoda google.accounts.oauth2.initCodeClient()
inicjuje klienta kodu.
Wyskakujące okienko lub tryb przekierowania
Możesz udostępnić kod autoryzacji za pomocą opcji Przekierowanie lub Wzorzec przeglądania w trybie Wyskakujące okienko. W trybie przekierowania hostujesz autoryzację OAuth2 na serwerze, a Google przekierowuje klienta użytkownika do tego punktu końcowego, udostępniając kod autoryzacji jako parametr adresu URL. W przypadku trybu wyskakującego definiujesz kod JavaScript modułu obsługi wywołania zwrotnego, który wysyła kod autoryzacji do serwera. Tryb wyskakującego okienka mogą zapewnić wygodę użytkownikom, którzy nie muszą opuszczą Twoją witrynę.
Aby zainicjować klienta dla:
Przekieruj przepływ UX, ustaw
ux_mode
naredirect
i wartośćredirect_uri
do punktu końcowego kodu autoryzacji Twojej platformy. Wartość musi dokładnie odpowiadać jednemu z autoryzowanych identyfikatorów URI przekierowania dla OAuth 2.0 skonfigurowany w konsoli API. Musi też być zgodna z Reguły weryfikacji identyfikatora URI przekierowania.Wyskakujące okienko procesu UX, ustaw
ux_mode
napopup
, a wartośćcallback
na nazwa funkcji, która będzie używana do wysyłania kodów autoryzacji na platformy.
Zapobieganie atakom CSRF
Aby zapobiegać atakom typu cross-site-Request-Forgery (CSRF) w nieco inny sposób dla procesów UX w trybach przekierowania i wyskakującego okienka. W przypadku przekierowania używany jest parametr state protokołu OAuth 2.0. Zobacz RFC6749, sekcję 10.12 Fałszywe żądania dotyczące innych witryn , aby dowiedzieć się więcej o generowaniu i weryfikowaniu parametru state. W trybie wyskakujących okienek musisz dodać do żądań niestandardowy nagłówek HTTP, a następnie potwierdzić na serwerze pasuje do oczekiwanej wartości i punktu początkowego.
Wybierz tryb UX, aby wyświetlić fragment kodu przedstawiający kod autoryzacji i obsługę CSRF:
Tryb przekierowania
Zainicjuj klienta, w którym Google przekierowuje przeglądarkę użytkownika do Twojej punktu końcowego uwierzytelniania, udostępniając kod uwierzytelniania jako parametr adresu URL.
const client = google.accounts.oauth2.initCodeClient({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/calendar.readonly',
ux_mode: 'redirect',
redirect_uri: "https://your.domain/code_callback_endpoint",
state: "YOUR_BINDING_VALUE"
});
Tryb wyskakującego okienka
Inicjowanie klienta, z którego przeglądarka użytkownika otrzymuje kod autoryzacji Google i wysyła ją na Twój serwer.
const client = google.accounts.oauth2.initCodeClient({
client_id: 'YOUR_GOOGLE_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/calendar.readonly',
ux_mode: 'popup',
callback: (response) => {
const xhr = new XMLHttpRequest();
xhr.open('POST', code_receiver_uri, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Set custom header for CRSF
xhr.setRequestHeader('X-Requested-With', 'XmlHttpRequest');
xhr.onload = function() {
console.log('Auth code response: ' + xhr.responseText);
};
xhr.send('code=' + response.code);
},
});
Aktywuj przepływ kodu OAuth 2.0
Wywołaj metodę requestCode()
klienta kodu, aby aktywować przepływ użytkowników:
<button onclick="client.requestCode();">Authorize with Google</button>
Aby to zrobić, użytkownik będzie musiał zalogować się na konto Google i wyrazić zgodę na poszczególnych zakresów przed zwróceniem kodu autoryzacji do lub modułu obsługi wywołania zwrotnego.
Obsługa kodu autoryzacji
Google generuje niepowtarzalny kod autoryzacji dla każdego użytkownika, który otrzymasz, na serwerze backendu.
W trybie wyskakujących okienek moduł obsługi określony przez callback
, który działa w
przekazuje kod autoryzacji do punktu końcowego hostowanego przez Twoją platformę.
W trybie przekierowania żądanie GET
jest wysyłane do punktu końcowego określonego przez
redirect_url
, udostępniając kod autoryzacji w parametrze code adresu URL. Do
otrzymać kod autoryzacji:
Utwórz nowy punkt końcowy autoryzacji, jeśli nie masz istniejącego lub implementacji,
Zaktualizuj istniejący punkt końcowy, aby akceptował żądania
GET
i URL . Wcześniej żądaniePUT
z wartością kodu autoryzacji w z jakiegoś ładunku.
Punkt końcowy autoryzacji
Punkt końcowy kodu autoryzacji musi obsługiwać żądania GET
z tymi zapytaniami do adresu URL
parametry ciągu:
Nazwa | Wartość |
---|---|
użytkownik uwierzytelniania | Prośba o uwierzytelnienie logowania użytkownika |
kod | Kod autoryzacji OAuth2 wygenerowany przez Google |
HD | Domena hostowana konta użytkownika |
prompt | Okno z prośbą o zgodę użytkownika |
zakres | Rozdzielona spacjami lista co najmniej 1 zakresu OAuth2 do autoryzacji |
stan | Zmienna stanowa CRSF |
Przykładowe żądanie GET
z parametrami adresu URL prowadzącym do punktu końcowego o nazwie auth-code i
z witryny example.com:
Request URL: https://www.example.com/auth-code?state=42a7bd822fe32cc56&code=4/0AX4XfWiAvnXLqxlckFUVao8j0zvZUJ06AMgr-n0vSPotHWcn9p-zHCjqwr47KHS_vDvu8w&scope=email%20profile%20https://www.googleapis.com/auth/calendar.readonly%20https://www.googleapis.com/auth/photoslibrary.readonly%20https://www.googleapis.com/auth/contacts.readonly%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&authuser=0&hd=example.com&prompt=consent
Gdy przepływ kodu autoryzacji jest inicjowany przez wcześniejsze biblioteki JavaScript,
lub przez bezpośrednie wywołania punktów końcowych Google OAuth 2.0, używane jest żądanie POST
.
Przykładowe żądanie POST
zawierające kod autoryzacji jako ładunek w
Treść żądania HTTP:
Request URL: https://www.example.com/auth-code
Request Payload: 4/0AX4XfWhll-BMV82wi4YwbrSaTPaRpUGpKqJ4zBxQldU\_70cnIdh-GJOBZlyHU3MNcz4qaw
Weryfikowanie żądania
Na serwerze wykonaj te czynności, aby uniknąć ataków CSRF.
Sprawdź wartość parametru state dla trybu przekierowania.
Potwierdź, że nagłówek X-Requested-With: XmlHttpRequest
jest ustawiony na tryb wyskakujących okienek.
Następnie możesz uzyskać od Google tokeny odświeżania i dostępu. tylko wtedy, gdy najpierw udało się zweryfikować żądanie kodu autoryzacji.
Uzyskiwanie dostępu i odświeżanie tokenów
Gdy platforma backendu otrzyma kod autoryzacji od Google zweryfikuje żądanie, użyj kodu autoryzacji, aby uzyskać dostęp i odświeżyć tokeny Google, aby wywoływać interfejs API.
Postępuj zgodnie z instrukcjami od Krok 5. Wymiana kodu autoryzacji dla domeny Tokeny odświeżania i dostępu w artykule Korzystanie z protokołu OAuth 2.0 na potrzeby serwera WWW Przewodnik po aplikacjach.
Zarządzanie tokenami
Platforma bezpiecznie przechowuje tokeny odświeżania. Usuń zapisane tokeny odświeżania, gdy
konta użytkowników zostaną usunięte lub zgoda użytkownika zostanie cofnięta przez
google.accounts.oauth2.revoke
lub bezpośrednio z
https://myaccount.google.com/permissions.
Opcjonalnie możesz też rozważyć zastosowanie RISC do ochrony kont użytkowników za pomocą wielu kont Ochrona.
Zwykle platforma backendu wywołuje interfejsy API Google przy użyciu tokena dostępu. Jeśli
aplikacja internetowa będzie także bezpośrednio wywoływać interfejsy API Google z przeglądarki użytkownika,
musi zaimplementować sposób udostępniania tokena dostępu aplikacji internetowej, wykonując
więc wykraczają poza zakres tego przewodnika. Stosując się do tej metody i korzystając z
Biblioteka klienta interfejsów API Google do języka JavaScript
użyj gapi.client.SetToken()
do tymczasowego przechowywania tokena dostępu w przeglądarce
pamięci i włączać bibliotekę do wywoływania interfejsów API Google.