Авторизовать учетную запись

Создав проекты Google Cloud и Device Access, вы можете авторизовать учетную запись Google с помощью поддерживаемого устройства Google Nest для API SDM.

Для просмотра конструкций и устройств необходимо привязать аккаунт Google к своемуDevice Access проект с использованием PCM. PCM позволяет user дать разрешение разрешить developers для доступа к их структурам и данным устройства.

В этом руководстве вы выступаете в роли user и developer.

  1. Откройте следующую ссылку в веб-браузере, заменив:

    1. project-id с вашим Device Access Project ИДЕНТИФИКАТОР
    2. oauth2-client-id с идентификатором клиента OAuth2 из ваших учетных данных 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. Если вы недавно вошли в Google с несколькими учетными записями, вам может быть представлен начальный экран «Выберите учетную запись» со списком ваших учетных записей Google. Если да, выберите учетную запись Google, привязанную к устройствам, для которых вы хотите авторизоваться. Device Access.
  3. Экран разрешений Google Nest — это сам PCM. Здесь вы можете предоставить разрешения на структуру и устройство. Включите разрешения для вашего дома (шаг 1) и всех устройств в этом доме, которые поддерживаются SDM API (шаг 2), затем нажмите «Далее» .
  4. На экране «Выберите учетную запись для перехода к имени проекта» , где имя проекта — это имя вашего проекта Google Cloud, выберите учетную запись Google, которую вы хотите авторизовать для SDM API. Используйте ту же учетную запись Google, что и раньше.
  5. После выбора учетной записи вы можете увидеть экран с предупреждением о том, что Google не проверил это приложение . Если да, то для продолжения выберите параметр «Дополнительно» , а затем нажмите «Перейти к имени проекта (небезопасно)» . Дополнительную информацию см. в разделе Google не подтвердил это приложение .
  6. На экране «Предоставить имя проекта» нажмите «Разрешить» , чтобы предоставить проекту разрешение на доступ к вашей учетной записи Google.
  7. На экране «Подтвердите свой выбор» убедитесь, что разрешения, которые вы хотите предоставить, отмечены флажком, и нажмите «Разрешить» для подтверждения.
  8. Вы должны быть перенаправлены на https://www.google.com. Код авторизации возвращается в качестве параметра code в URL-адресе, который должен быть в следующем формате:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Скопируйте код авторизации.

Получить токен доступа

Используйте код авторизации, чтобы получить токен доступа, который можно использовать для вызова API SDM.

  1. Откройте терминал и выполните следующую команду curl , заменив:

    1. oauth2-client-id и oauth2-client-secret с идентификатором клиента OAuth2 и секретом клиента из ваших учетных данных Google Cloud.
    2. authorization-code с кодом, который вы получили на предыдущем шаге
    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. Google OAuth возвращает два токена: токен доступа и токен обновления.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Скопируйте оба этих значения. Токен доступа используется для вызова API SDM, а токен обновления используется для получения нового токена доступа.

Вызов списка устройств

Авторизация не будет завершена, пока вы не сделаете первый вызов devices.list с новым токеном доступа. Этот первоначальный вызов завершает процесс авторизации и активирует события, если вы уже настроили подписку Pub/Sub.

Используйте curl , чтобы выполнить этот вызов конечной точки devices :

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

Успешный вызов возвращает список устройств, связанных с вашим Device Accessпроект. Каждое устройство имеет свой уникальный список доступных характеристик:

{
  "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"
        }
      ]
    }
  ]
}

Как использовать токен обновления

Токены доступа для API SDM действительны только в течение 1 часа, как указано в параметре expires_in , возвращаемом Google OAuth. Если срок действия вашего токена доступа истек, используйте токен обновления, чтобы получить новый.

Команда аналогична команде токена доступа, за исключением того, что вы используете другой grant_type .

  1. Откройте терминал и выполните следующую команду curl , заменив:

    1. oauth2-client-id и oauth2-client-secret с идентификатором клиента OAuth2 и секретом клиента из ваших учетных данных Google Cloud.
    2. refresh-token с кодом, который вы получили при первоначальном получении токена доступа.
    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. Google OAuth возвращает новый токен доступа.

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

Поиск неисправностей

Дополнительные сведения о Google OAuth см. в разделе Использование OAuth 2.0 для доступа к API Google .

Срок действия токена обновления истекает

Токены обновления могут перестать работать через 7 дней, если идентификатор клиента не утвержден — одна из возможных причин. 7-дневный срок действия токена не связан с одобрением коммерческого использования или песочницы. Учетная запись службы или пользователя должна получить одобрение своего идентификатора клиента OAuth 2.0 и запустить его в производство, чтобы продлить срок действия токена. Дополнительную информацию см. в разделе «Обновление срока действия токена» .

Доступ запрещен

Если вы настроили экран согласия OAuth в Google Cloud и тип пользователя«Внешний », вы получите сообщение об ошибке «Доступ запрещен», если вы попытаетесь связать учетную запись с учетной записью Google, которая не указана в качестве тестового пользователя для вашего приложения. . Обязательно добавьте учетную запись Google в раздел «Тестовые пользователи» на экране согласия OAuth .

Ошибка диспетчера подключений партнеров (PCM)

Справку по устранению ошибок, возникающих при доступе к PCM, см . в разделе «Справочник по ошибкам Partner Connections Manager (PCM)» .

Google не подтвердил это приложение

API SDM использует ограниченную область. Это означает, что любые приложения, использующие эту область во время авторизации, будут «непроверенными», пока проверка API OAuth не будет завершена. При использовании Device Access для личного использования проверка OAuth API не требуется.

Во время процесса авторизации вы можете увидеть экран «Google не проверил это приложение», который появляется, если область действия sdm.service не настроена на экране согласия OAuth в Google Cloud. Этот экран можно обойти, щелкнув параметр «Дополнительно» , а затем нажав «Перейти к имени проекта (небезопасно)» .

Дополнительную информацию см. в разделе «Экран непроверенного приложения» .

Неверный клиент

При попытке получить токен доступа или обновления вы получите сообщение об ошибке «Неверный клиент», если предоставите неправильный секретный ключ клиента OAuth 2.0. Убедитесь, что значение client_secret которое вы используете в вызовах токена доступа и обновления, соответствует используемому идентификатору клиента OAuth 2.0, как указано на странице Google Cloud Credentials .

Неверный запрос, отсутствует требуемая область действия.

После предоставления разрешений в PCM вы можете столкнуться с ошибкой «Неверный запрос»: «Отсутствует обязательный параметр: область». Убедитесь, что значение scope которое вы используете в вызовах авторизации, такое же, как значение, которое вы установили для клиента OAuth 2.0, как указано на странице учетных данных Google Cloud .

Несоответствие URI перенаправления

При прохождении авторизации вы можете столкнуться с ошибкой «Redirect uri несоответствие». Убедитесь, что значение redirect_uri которое вы используете в вызовах авторизации, совпадает со значением, которое вы установили для клиента OAuth 2.0, как указано на странице учетных данных Google Cloud .

Изменить разрешения учетной записи

Чтобы изменить разрешения, предоставленные Device Access проект, или отключить его совсем, заходим в PCM:

https://nestservices.google.com/partnerconnections

На этой странице отображаются все услуги сторонних разработчиков (Device Access проекты), подключенные к вашей учетной записи. Выберите Device Access проект, который вы хотите изменить. Используйте следующий экран, чтобы изменить разрешения по желанию.

Чтобы отозвать только определенные разрешения для авторизованной службы , переключите разрешения, которые вы хотите отозвать, и нажмите стрелку назад, чтобы сохранить.

Чтобы полностью отключить авторизованную службу , нажмите «Отменить связь с вашей учетной записью Google», чтобы отозвать все разрешения и токены доступа, которые проект предоставил для этой учетной записи.

Если PCM не показывает нужную услугу, возможно, вам придется сначала выполнить вызов списка устройств .

Краткая справка

Используйте эту ссылку, чтобы быстро выполнить действия по авторизацииuser и свяжите их учетную запись Google.

Чтобы использовать этот краткий справочник, отредактируйте каждую переменную-заполнитель в примерах кода, указав значения для вашей конкретной интеграции, а затем скопируйте и вставьте при необходимости:

1 ПКМ

Откройте следующую ссылку в веб-браузере, заменив:

  1. project-id с твоим Device Access Project ИДЕНТИФИКАТОР
  2. oauth2-client-id с идентификатором клиента OAuth2 из ваших учетных данных 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 Код авторизации

Вы должны быть перенаправлены на https://www.google.com. Код авторизации возвращается в качестве параметра code в URL-адресе, который должен быть в следующем формате:

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

3 токена доступа

Используйте код авторизации, чтобы получить токен доступа, который можно использовать для вызова API SDM.

Откройте терминал и выполните следующую команду curl , заменив:

  1. oauth2-client-id и oauth2-client-secret с идентификатором клиента OAuth2 и секретом клиента из ваших учетных данных Google Cloud.
  2. authorization-code с кодом, который вы получили на предыдущем шаге

Google OAuth возвращает два токена: токен доступа и токен обновления.

Запрос

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'

Ответ

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

4 API-вызов

Авторизация не будет завершена, пока вы не сделаете первый вызов devices.list с новым токеном доступа. Этот первоначальный вызов завершает процесс авторизации и активирует события, если вы уже настроили подписку Pub/Sub.

Для завершения авторизации необходимо использовать один из вызовов API, перечисленных для указанной области.

сдм.сервис

устройства

Дополнительную информацию см. в справочнике по 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 токенов обновления

Токены доступа для API SDM действительны только в течение 1 часа, как указано в параметре expires_in , возвращаемом Google OAuth. Если срок действия вашего токена доступа истек, используйте токен обновления, чтобы получить новый.

Откройте терминал и выполните следующую команду curl , заменив:

  1. oauth2-client-id и oauth2-client-secret с идентификатором клиента OAuth2 и секретом клиента из ваших учетных данных Google Cloud.
  2. refresh-token с кодом, который вы получили при первоначальном получении токена доступа.

Google OAuth возвращает новый токен доступа.

Запрос

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'

Ответ

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