Autorizar uma conta

Depois de criar os projetos do Google Cloud e do Acesso a Dispositivos, é possível autorizar uma Conta do Google com um dispositivo Google Nest compatível com a API SDM.

Para ver estruturas e dispositivos, é preciso vincular uma Conta do Google ao seu projetoDevice Access usando o PCM. O PCM permite que user conceda permissão para que developers acessem as estruturas e os dados do dispositivo deles.

Neste guia, você atua como user e developer.

  1. Abra o link a seguir em um navegador da Web, substituindo:

    1. project-id pelo seu Device Access Project documento de identidade
    2. oauth2-client-id pelo ID do cliente OAuth2 das suas credenciais do Google Cloud
    https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service
    
  2. Se você tiver feito login no Google com várias contas recentemente, uma tela inicial Escolha uma conta será exibida com uma lista das suas Contas do Google. Se for o caso, selecione a Conta do Google vinculada aos dispositivos que você quer autorizar para Device Access.
  3. A tela Permissões do Google Nest é a própria tela PCM. Aqui é possível conceder permissões de estrutura e dispositivo. Ative as permissões da sua casa (Etapa 1) e de todos os dispositivos com suporte da API SDM (Etapa 2) e clique em Next.
  4. Na tela Escolha uma conta para prosseguir para Nome do projeto, em que Nome do projeto é o nome do seu projeto do Google Cloud, selecione a Conta do Google que você quer autorizar para a API SDM. Use a mesma Conta do Google de antes.
  5. Depois de escolher uma conta, talvez você veja uma tela de aviso informando que O Google não verificou este aplicativo. Se esse for o caso, clique na opção Avançado e depois em Ir para Nome do projeto (não seguro). Consulte O Google não verificou este app para mais informações.
  6. Na tela Conceda permissão para o Nome do projeto, clique em Permitir para que o projeto possa acessar sua Conta do Google.
  7. Na tela Confirm your options, verifique se as permissões que você quer conceder estão marcadas e clique em Allow para confirmar.
  8. Você será redirecionado para https://www.google.com. O código de autorização é retornado como o parâmetro code no URL, que precisa estar neste formato:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Copie o código de autorização.

Receber um 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.

  1. Abra um terminal e execute o seguinte comando curl, substituindo:

    1. oauth2-client-id e oauth2-client-secret pelo ID do cliente OAuth2 e pela chave secreta do cliente das suas credenciais do Google Cloud
    2. authorization-code pelo código que você recebeu na etapa anterior.
    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=https://www.google.com'
    
  2. O Google OAuth retorna dois tokens: um de acesso e um de atualização.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Copie esses dois valores. O token de acesso é usado para chamar a API SDM e o token de atualização é usado para receber um novo token de acesso.

Fazer uma chamada para a lista de dispositivos

A autorização não é concluída até que você faça a primeira chamada devices.list com o novo token de acesso. Essa chamada inicial finaliza o processo de autorização e ativa os eventos se você já tiver configurado uma assinatura do Pub/Sub.

Use curl para fazer essa chamada para o endpoint devices:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Uma chamada bem-sucedida retorna uma lista de dispositivos vinculados ao projeto Device Access. Cada dispositivo tem a própria lista exclusiva de características disponíveis:

{
  "devices": [
    {
      "name": "enterprises/project-id/devices/device-id",
      "type": "sdm.devices.types.device-type",
      "traits": { ... },
      "parentRelations": [
        {
          "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
          "displayName": "device-room-name"
        }
      ]
    }
  ]
}

Como usar um token de atualização

Os tokens de acesso para a API SDM são válidos por apenas 1 hora, conforme indicado no parâmetro expires_in retornado pelo Google OAuth. Se o token de acesso expirar, use o token de atualização para receber um novo.

O comando é semelhante ao token de acesso 1, mas você usa um grant_type diferente.

  1. Abra um terminal e execute o seguinte comando curl, substituindo:

    1. oauth2-client-id e oauth2-client-secret pelo ID do cliente OAuth2 e pela chave secreta do cliente das suas credenciais do Google Cloud
    2. refresh-token pelo código que você recebeu ao receber inicialmente o token de acesso.
    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'
    
  2. O Google OAuth retorna um novo token de acesso.

    {
      "access_token": "new-access-token",
      "expires_in": 3599,
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }

Solução de problemas

Para saber mais sobre o Google OAuth, consulte Como usar o OAuth 2.0 para acessar as APIs do Google.

O token de atualização continua expirando

Os tokens de atualização podem parar de funcionar após sete dias, caso o ID do cliente não seja aprovado. A validade do token de sete dias não está relacionada a 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 vida útil do token. Consulte Expiração do token de atualização para mais informações.

Acesso negado

Se você tiver configurado a tela de permissão OAuth no Google Cloud e o Tipo de usuário for Externo, a mensagem de erro "Acesso negado" será exibida se você tentar vincular uma Conta do Google que não esteja listada como um usuário de teste para o app. Adicione a Conta do Google à seção Usuários de teste na tela de consentimento do OAuth.

Erro do Partner Connections Manager (PCM)

Para receber ajuda com erros encontrados ao acessar o PCM, consulte a Referência de erros do Partner Connections Manager (PCM).

O Google não verificou este app

A API SDM usa um escopo restrito, o que significa que qualquer app que usar esse escopo durante a autorização será "não verificado", a menos que a Verificação da API OAuth seja concluída. Ao usar Device Access para uso pessoal, a verificação da API OAuth não é necessária.

Talvez você veja a tela "O Google não verificou este app" durante o processo de autorização, que aparece se o escopo sdm.service não estiver configurado na tela de consentimento do OAuth no Google Cloud. Para ignorar essa tela, clique na opção Advanced e em Go to Project Name (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ê verá o erro "Cliente inválido" se informar uma chave secreta do cliente do OAuth 2.0 incorreta. Verifique se o valor client_secret que você está usando nas chamadas de token de acesso e atualização é o mesmo do ID do cliente OAuth 2.0 que está sendo usado, conforme encontrado na página Credenciais do Google Cloud.

Solicitação inválida, escopo obrigatório ausente

Depois de conceder permissões no PCM, o erro "Solicitação inválida" pode aparecer: "Parâmetro obrigatório ausente: escopo". Verifique se o valor scope que você está usando nas chamadas de autorização é igual ao definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.

Incompatibilidade de URI de redirecionamento

Ao passar pela autorização, você pode encontrar um erro "Incompatibilidade de URI de redirecionamento". Verifique se o valor redirect_uri que você está usando nas chamadas de autorização é o mesmo que o definido para o cliente OAuth 2.0, conforme encontrado na página Credenciais do Google Cloud.

Modificar permissões da conta

Para modificar as permissões concedidas a um Device Access projeto ou desconectá-lo completamente, acesse o PCM:

https://nestservices.google.com/partnerconnections

Esta página mostra todos os serviços para desenvolvedores terceirizados (Device Access projetos) conectados à sua conta. Selecione o projeto Device Access que você quer alterar. Use a próxima tela para modificar as permissões.

Para revogar apenas permissões específicas de um serviço autorizado, alterne as permissões que você quer revogar e clique na seta "Voltar" para salvar.

Para desconectar completamente um serviço autorizado, clique em Desvincular sua Conta do Google para revogar todas as permissões e tokens de acesso concedidos ao projeto para a conta.

Se o PCM não mostrar o serviço desejado, talvez seja necessário fazer uma chamada de lista de dispositivos primeiro.

Referência rápida

Use essa referência para implementar rapidamente as etapas para autorizar umauser e vincular a Conta do Google dela.

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

Abra o link a seguir em um navegador da Web, substituindo:

  1. project-id pelo seu Device Access Project documento de identidade
  2. oauth2-client-id pelo ID do cliente OAuth2 das suas credenciais do Google Cloud
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service

2 Código de autorização

Você será redirecionado para https://www.google.com. O código de autorização é retornado como o parâmetro code no URL, que precisa estar neste formato:

https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service

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.

Abra um terminal e execute o seguinte comando curl, substituindo:

  1. oauth2-client-id e oauth2-client-secret pelo ID do cliente OAuth2 e pela chave secreta do cliente das suas credenciais do Google Cloud
  2. authorization-code pelo código que você recebeu na etapa anterior.

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=https://www.google.com'

Resposta

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/sdm.service",
  "token_type": "Bearer"
}

4 Chamada de API

A autorização não é concluída até que você faça a primeira chamada devices.list com o novo token de acesso. Essa chamada inicial finaliza o processo de autorização e ativa os eventos se você já tiver configurado uma assinatura do Pub/Sub.

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 para a API SDM são válidos por apenas 1 hora, conforme indicado no parâmetro expires_in retornado pelo Google OAuth. Se o token de acesso expirar, use o token de atualização para receber um novo.

Abra um terminal e execute o seguinte comando curl, substituindo:

  1. oauth2-client-id e oauth2-client-secret pelo ID do cliente OAuth2 e pela chave secreta do cliente das suas credenciais do Google Cloud
  2. refresh-token pelo código que você recebeu ao receber inicialmente 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/sdm.service",
  "token_type": "Bearer"
}