401 Несанкционированный - Chrome Приложение Oauth для вызова облачных функций Google - PullRequest
0 голосов
/ 18 марта 2020

Я слежу за этим: https://developer.chrome.com/apps/tut_oauth

Но это не работает. Когда я вызываю функцию Cloud, я получаю ошибку 401. Авторизация: Носитель "токен доступа" добавляется в заголовок запроса. Хотя другой вопрос здесь [1] гласит, что ID_TOKEN следует использовать. Который я пробовал через curl, но с той же ошибкой 401.

chrome.identity.getAuthToken({interactive: true}, function(token) {
        var dat = {
"user_email":email_id,
"user_id":user_id
};
     $.ajax({
        type: "POST",
        data:dat,
         dataType: 'json',
   url:str,
    contentType: "application/json",
         error: function (xhr, status, error) {
        console.log(xhr)
    }, success: function (data, status, xhr) {
        console.log('Success!' +data + status);
    },
      headers:{  
      'x-goog-project-id': 'xxxxxxxxxxxxx',
   'Authorization': 'Bearer ' + token,
   'Content-Type':'application/json',
   'Accept': 'application/json'
  }
    });
     });

[1] Почему не предоставление члену 'allAuthenticatedUsers' роли 'Cloud Functions Invoker' не работает для облачных функций Google?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Я отказался от этого, поскольку не существует прямого решения для вызова функции Cloud с использованием oauth в Chrome приложениях. Альтернативное решение, которое сработало, - это аутентификация через ключ API. То есть с помощью облачной функции с облачными конечными точками.

Я следовал логи c здесь: https://medium.com/@akash.mahale / triggering-google-cloud-functions-with-cloud-endpoints-and-api-key -857e94a8a3aa

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

0 голосов
/ 18 марта 2020

В упомянутом вами руководстве использовался «токен доступа» для доступа к контактам Google пользователя с помощью API Google People и Chrome Identity API.

Если вы хотите получить доступ к облачной функции Google, которая не Разрешить неаутентифицированные вызовы, вы должны использовать ID_TOKEN .

Для тестирования вы можете создать служебную учетную запись с помощью --role="roles/cloudfunctions.invoker", затем создать файл key.json и экспортировать GOOGLE_APPLICATION_CREDENTIALS переменную env ссылку

Наконец, вы можете использовать:

curl "https://us-central1-your-project.cloudfunctions.net/yourfunction"
# Error 403 (Forbidden)
curl "https://us-central1-your-project.cloudfunctions.net/yourfunction"   -H "Authorization: bearer $(gcloud auth print-identity-token)"
#Success
...