Durante o processo de autorização, o OAuth do Google pode retornar um erro. Use este guia para resolver os erros mais comuns durante esse processo.
Solução de problemas
Para saber mais sobre o OAuth do Google, consulte Como usar o OAuth 2.0 para acessar as APIs do Google.
O token de atualização expira constantemente
Os tokens de atualização podem parar de funcionar após sete dias se o ID do cliente não for aprovado. A expiração do token de sete dias não está relacionada às aprovações comerciais ou de sandbox. Uma conta de serviço ou de usuário precisa ter o ID do cliente OAuth 2.0 aprovado e colocado em produção para aumentar a validade do token. Consulte Validade do token de atualização para mais informações.
Acesso negado
Se você configurou a tela de permissão OAuth no Google Cloud e o Tipo de usuário é Externo, vai aparecer um erro de "Acesso negado" se você tentar vincular a conta com uma Conta do Google que não está listada como usuário de teste do app. Adicione a Conta do Google à seção Usuários de teste na tela de permissão OAuth.
Erro do Partner Connections Manager (PCM)
Para receber ajuda com erros encontrados ao acessar o PCM, consulte a Referência de erros do Gerenciador de conexões de parceiros (PCM).
O Google não verificou este app
A API SDM usa um escopo restrito, o que significa que todos os apps que usam esse escopo durante a autorização serão "não verificados", a menos que a verificação da API OAuth seja concluída. Ao usar o Device Access para uso pessoal, a verificação da API OAuth não é necessária.
Durante o processo de autorização, talvez apareça uma tela "O Google não verificou este app" se o escopo sdm.service
não estiver configurado na sua tela de consentimento do OAuth no Google Cloud. Para ignorar essa tela, clique em Avançado e em Acessar Nome do projeto (não seguro).
Consulte Tela de app não verificado para mais informações.
Cliente inválido
Ao tentar receber um token de acesso ou de atualização, você vai receber um erro "Cliente inválido" se fornecer um segredo do cliente OAuth 2.0 incorreto. Verifique se o valor client_secret
usado nas chamadas de token de acesso e atualização é o ID do cliente OAuth 2.0 em uso, conforme encontrado na página Credenciais do Google Cloud.
Solicitação inválida, escopo obrigatório ausente
Depois de conceder permissões no PCM, talvez você encontre um erro "Solicitação inválida" de "Parâmetro obrigatório ausente: escopo". Verifique se o valor scope
usado nas chamadas de autorização é o mesmo definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.
Falha na correspondência do URI de redirecionamento
Durante a autorização, talvez você encontre um erro de "URI de redirecionamento incompatível". Verifique se o valor redirect_uri
usado nas chamadas de autorização é o mesmo definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.
Referência rápida
Use esta referência para implementar rapidamente as etapas de autorização de um user e vincular a Conta do Google .
Para usar esta referência rápida, edite cada variável de marcador nos exemplos de código com os valores da sua integração específica e copie e cole conforme necessário:
1 PCM
Direcione o user ao link do PCM no seu app, substituindo:
- project-id com seu ID Device Access Project
- oauth2-client-id com o ID do cliente OAuth2 das suas credenciais do Google Cloud
- redirect-uri com um URI de redirecionamento especificado para o ID do cliente OAuth2 que você está usando
- scope com um dos seus escopos disponíveis
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 Código de autenticação
Depois de conceder permissões pelo PCM para
o escopo selecionado, o user será redirecionado para o URI de redirecionamento
especificado. O código de autorização é retornado como o parâmetro code
no URL,
que precisa estar neste formato:
redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope
3. Token de acesso
Use o código de autorização para recuperar um token de acesso que pode ser usado para chamar a API SDM em nome do usuário.
Faça uma chamada POST para o endpoint OAuth do Google, substituindo:
- oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
- authorization-code com o código que você recebeu na etapa anterior.
- redirect-uri com um URI de redirecionamento especificado para o ID do cliente OAuth2 que você está usando
O Google OAuth retorna dois tokens: um de acesso e um de atualização.
Solicitação
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'
Resposta
{"access_token": "access-token",
"expires_in": 3599,
"refresh_token": "refresh-token",
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer" }
4. Chamada de API
A autorização não será concluída até que você faça uma chamada de API com o token de acesso do user. Essa chamada inicial conclui o processo de autorização e ativa os eventos.
Você precisa usar uma das chamadas de API listadas para o escopo especificado para concluir a autorização.
sdm.service
dispositivo
Consulte a
referência da API
devices.list
para mais informações.
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'
5 Token de atualização
Os tokens de acesso da API SDM são válidos por apenas uma hora, conforme observado no parâmetro expires_in
retornado pelo OAuth do Google. Se o token de acesso expirar, use o token de atualização para receber um novo.
Faça uma chamada POST para o endpoint OAuth do Google, substituindo:
- oauth2-client-id e oauth2-client-secret com o ID do cliente e a chave secreta do cliente OAuth2 das suas credenciais do Google Cloud.
- refresh-token com o código recebido ao gerar o token de acesso.
O Google OAuth retorna um novo token de acesso.
Solicitação
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'
Resposta
{"access_token": "new-access-token",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer" }