Podczas procesu autoryzacji Google OAuth może zwrócić błąd. Z tego przewodnika dowiesz się, jak rozwiązywać najczęstsze problemy podczas tego procesu.
Rozwiązywanie problemów
Więcej informacji o OAuth Google znajdziesz w artykule Używanie protokołu OAuth 2.0 na potrzeby dostępu do interfejsów API Google.
Token odświeżania ciągle wygasa
Tokeny odświeżania mogą przestać działać po 7 dniach, jeśli identyfikator klienta nie zostanie zatwierdzony. 7-dniowy okres ważności tokena nie jest związany z zatwierdzeniami w przypadku środowiska komercyjnego ani piaskownicy. Aby uzyskać dłuższy okres ważności tokena, konto usługi lub użytkownika musi mieć zatwierdzony identyfikator klienta OAuth 2.0 i być wdrożone w środowisku produkcyjnym. Więcej informacji znajdziesz w sekcji Wygaśnięcie tokena odświeżania.
Odmowa dostępu
Jeśli ekran akceptacji OAuth został skonfigurowany w Google Cloud, a Typ użytkownika to Zewnętrzny, podczas próby połączenia konta z kontem Google, które nie jest wymienione jako użytkownik testowy aplikacji, pojawi się błąd „Odmowa dostępu”. Pamiętaj, aby dodać konto Google do sekcji Użytkownicy testowi na ekranie akceptacji OAuth.
Błąd Menedżera połączeń z partnerami (PCM)
Jeśli podczas uzyskiwania dostępu do PCM wystąpią błędy, zapoznaj się z informacjami o błędach w Menedżerze połączeń z partnerami (PCM).
Ta aplikacja nie została zweryfikowana przez Google
Interfejs SDM API używa ograniczonego zakresu, co oznacza, że wszystkie aplikacje, które używają tego zakresu podczas autoryzacji, będą „niezweryfikowane”, dopóki nie zostanie ukończona weryfikacja interfejsu OAuth API. Jeśli używasz Device Access do celów osobistych, weryfikacja interfejsu OAuth API nie jest wymagana.
Podczas procesu autoryzacji może pojawić się ekran „Google nie zweryfikowało tej aplikacji”. Wyświetla się on, jeśli zakres sdm.service
nie jest skonfigurowany na ekranie zgody OAuth w Google Cloud. Ten ekran można pominąć, klikając opcję Zaawansowane, a następnie Otwórz nazwę projektu (niebezpieczne).
Więcej informacji znajdziesz w sekcji Ekran niezweryfikowanej aplikacji.
Nieprawidłowy klient
Podczas próby uzyskania tokena dostępu lub tokena odświeżania pojawi się błąd „Nieprawidłowy klient”, jeśli podasz nieprawidłowy klucz klienta OAuth 2.0. Upewnij się, że wartość client_secret
używana w wywołaniach tokenów dostępu i odświeżania jest wartością identyfikatora klienta OAuth 2.0, który jest używany. Znajdziesz ją na stronie Google Cloud – Dane logowania.
Nieprawidłowe żądanie, brak wymaganego zakresu
Po przyznaniu uprawnień w PCM może pojawić się błąd „Nieprawidłowe żądanie” z komunikatem „Brak wymaganego parametru: scope”. Upewnij się, że wartość scope
używana w wywołaniach autoryzacji jest taka sama jak wartość ustawiona dla klienta OAuth 2.0 na stronie Dane logowania Google Cloud.
Niezgodność identyfikatora URI przekierowania
Podczas autoryzacji może pojawić się błąd „Redirect uri mismatch” (Niezgodność adresu URI przekierowania). Sprawdź, czy wartość redirect_uri
używana w wywołaniach autoryzacji jest taka sama jak wartość ustawiona dla klienta OAuth 2.0 na stronie Google Cloud – Dane logowania.
Szybkie omówienie
Skorzystaj z tego przewodnika, aby szybko wdrożyć czynności umożliwiające użytkownikom autoryzacjęuser i połączenie konta Google.
Aby skorzystać z tego krótkiego przewodnika, w przykładach kodu zastąp każdą zmienną wartościami odpowiednimi dla Twojej integracji i wklej kod w odpowiednim miejscu:
1 PCM
Kieruj user do linku PCM w swojej aplikacji, zastępując:
- project-id z Device Access Project dokumentem tożsamości
- oauth2-client-id z identyfikatorem klienta OAuth2 z Google Cloud.
- redirect-uri z identyfikatorem URI przekierowania określonym dla używanego identyfikatora klienta OAuth2;
- scope z jednym z dostępnych zakresów
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri& access_type=offline& prompt=consent& client_id=oauth2-client-id& response_type=code& scope=https://www.googleapis.com/auth/scope
2 Kod autoryzacji
Po przyznaniu uprawnień w PCM dla wybranego zakresu user powinien zostać przekierowany na określony identyfikator URI przekierowania. Kod autoryzacji jest zwracany jako parametr code
w adresie URL, który powinien mieć ten format:
redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope
3. Token dostępu
Użyj kodu autoryzacji, aby pobrać token dostępu, którego możesz używać do wywoływania interfejsu SDM API w imieniu użytkownika.
Wykonaj wywołanie POST do punktu końcowego OAuth Google, zastępując:
- oauth2-client-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
- authorization-code z kodem otrzymanym w poprzednim kroku.
- redirect-uri z identyfikatorem URI przekierowania określonym dla używanego identyfikatora klienta OAuth2;
Google OAuth zwraca 2 tokeny: token dostępu i token odświeżania.
Żądanie
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri'
Odpowiedź
{"access_token": "access-token",
"expires_in": 3599,
"refresh_token": "refresh-token",
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer" }
4 Wywołanie interfejsu API
Autoryzacja nie zostanie zakończona, dopóki nie wywołasz interfejsu API za pomocą tokena dostępu user. To pierwsze wywołanie kończy proces autoryzacji i umożliwia rejestrowanie zdarzeń.
Aby dokończyć autoryzację, musisz użyć jednego z wywołań interfejsu API wymienionych w przypadku określonego zakresu.
sdm.service
urządzenia
Więcej informacji znajdziesz w dokumentacji interfejsu API devices.list
.
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'
5. Token odświeżania
Tokeny dostępu do interfejsu SDM API są ważne tylko przez godzinę, co jest zaznaczone w parametrze expires_in
zwracanym przez Google OAuth. Jeśli token dostępu wygaśnie, użyj tokena odświeżania, aby uzyskać nowy.
Wykonaj wywołanie POST do punktu końcowego OAuth Google, zastępując:
- oauth2-client-id i oauth2-client-secret z identyfikatorem klienta OAuth2 i tajnym kluczem klienta z danych logowania Google Cloud.
- refresh-token z kodem otrzymanym podczas początkowego uzyskiwania tokena dostępu.
Google OAuth zwraca nowy token dostępu.
Żądanie
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'
Odpowiedź
{"access_token": "new-access-token",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer" }