Ошибка 400: invalid_scope Невозможно отобразить некоторые запрошенные области: [https://www.googleapis.com/auth/homegraph] - PullRequest
0 голосов
/ 29 мая 2020

Итак, я пытаюсь использовать Home Graph API , вызывая конечную точку API

https://homegraph.googleapis.com/v1/devices:requestSync

Это запрос HTTP POST, и для него требуется ACCESS_TOKEN и учетная запись службы ключ.

Получение ключа учетной записи службы легко выполняется согласно документации Google. Проблема заключается в получении ACCESS_TOKEN.

Согласно этой документации от Google, мне нужно получить ACCESS_TOKEN, созданный с использованием следующего объема разрешений

https://www.googleapis.com/auth/homegraph

Я открыл OAuth 2.0 Площадка для запроса разработчика временного ACCESS_TOKEN для тестирования. Я написал все необходимые URL-адреса, и в рамках я написал это - область написана для авторизации

Теперь после этого я перехожу к своему URL-адресу авторизации (ie, вход в Google страница). Я вхожу в систему с идентификатором электронной почты и паролем.

Если учетные данные верны и указанная область действия действительна, тогда я должен был быть перенаправлен на страницу игровой площадки OAuth с кодом авторизации, который я бы обменял на токен доступа и refre sh токен.

Но на самом деле происходит следующее: после ввода учетных данных я получаю следующую ошибку, и меня никогда не перенаправляют на страницу Oauth Playground-

Ошибка авторизации

Ошибка 400: invalid_scope

Невозможно отобразить некоторые запрошенные области: [https://www.googleapis.com/auth/homegraph]

Детали запроса

access_type = offline

o2v = 2 response_type = code

redirect_uri = https://developers.google.com/oauthplayground

подсказка = согласие client_id = xxxxxxxxx.apps.googleusercontent.com

scope = https://www.googleapis.com/auth/homegraph**

Я тоже много искал в Интернете, но не смог найти истинную причину. Итак, из-за этой проблемы с областью действия я не могу получить ACCESS_TOKEN.

Я следил за документацией Google, и объем был упомянут там.

Это pi c из настроек игровой площадки oauth 2.0 - Конфигурация OAuth 2.0

Ответы [ 2 ]

0 голосов
/ 25 августа 2020

Я реализовал подход REST для вызова состояния отчета HomeGraph, как показано ниже.

Нам нужно выполнить следующие шаги:

  1. Создайте учетную запись службы для вашего проекта и безопасно храните файл json
  2. Используя сервисный аккаунт JSON, получите токен доступа от Google
  3. Используя токен Oauth 2.0 в качестве авторизации на предъявителя, вызовите Report State API

Шаг 1: Это просто. Пожалуйста, следуйте инструкциям по приведенной ниже ссылке https://developers.google.com/assistant/smarthome/develop/report-state#expandable -1

Шаг 2: См. Код ниже, чтобы получить токен доступа с использованием служебной учетной записи json

GoogleCredentials credentials = GoogleCredentials
                .fromStream(Helper.class.getClassLoader().getResourceAsStream("smart-home-key.json"))
                .createScoped("https://www.googleapis.com/auth/homegraph");
        credentials.refreshIfExpired();
        AccessToken token = credentials.getAccessToken();
        return token.getTokenValue();

Шаг 3: Вызов API состояния отчета

curl -X POST -H «Авторизация: носитель [[токен доступа из шага 2]]» -H "Content-Type: application / json" -d @ тело запроса. json "https://homegraph.googleapis.com/v1/devices: reportStateAndNotification"

Ссылки: https://developers.google.com/assistant/smarthome/develop/report-state#http -post https://cloud.google.com/endpoints/docs/openapi/service-account-authentication https://developers.google.com/identity/protocols/oauth2/service-account#httprest_1 https://developers.google.com/assistant/smarthome/develop/report-state#expandable -1

0 голосов
/ 30 мая 2020

Проблема в том, что вы , пользователь, должны не получать и отправлять токен доступа. Сервисный аккаунт должен получать и отправлять токен доступа. Это необходимо для того, чтобы убедиться, что ваша служба авторизована для взаимодействия с Home Graph API.

Вы указали, что вошли на игровую площадку OAuth с «идентификатором пользователя и паролем». Но служебные учетные записи не имеют паролей.

Если вы используете одну из библиотек Google, она позаботится о получении токена доступа за вас, и это самый простой способ сделать это. Если вы просто тестируете и вам нужен токен доступа, вы можете использовать что-то вроде oauth2l , чтобы получить токен доступа на основе учетных данных учетной записи службы.

...