GCP: 403 Звонящий не имеет разрешения - PullRequest
0 голосов
/ 18 марта 2019

РЕДАКТИРОВАТЬ: я в конечном итоге предоставил доступ для редактирования к учетной записи службы из настроек общего доступа листа. Это позволило мне вставить в лист. Я не думаю, что это лучшее решение для моей ситуации, но это решение a .

Любая помощь, за которую я был бы благодарен. Я не думаю, что это сложная проблема, просто я никогда раньше не использовал GCP и все еще учусь.

Я пытаюсь написать в Google Sheet, используя их .NET API. Я хочу отправить отзыв пользователя на этот лист из игры, которую я разрабатываю. Я бы предпочел, чтобы этот процесс происходил без участия пользователя в процессе авторизации Google.

Я сталкиваюсь с этой ошибкой:

GoogleApiException: Google.Apis.Requests.RequestError
The caller does not have permission [403]
Errors [
    Message[The caller does not have permission] Location[ - ] Reason[forbidden] Domain[global]
]

Вот что я пробовал до сих пор.

  1. Успешно следовал руководству Google по чтению с листа.
  2. Создание учетной записи службы с разрешениями на запись в журнал.
  3. Загрузите и используйте учетные данные учетной записи службы через GoogleCredential.

У меня такое ощущение, что я просто выбрал неправильную роль, хотя я не уверен. Я буду продолжать исследования. Опять же, за любую помощь, за которую я был бы благодарен.

1 Ответ

1 голос
/ 18 марта 2019

Возможно, вам лучше использовать полный поток OAuth (3-legged-auth) для пользователя, а не для служебной учетной записи.

Смотрите пример здесь. Это использует учетную запись пользователя и требует, чтобы пользователь одобрил разрешение кода для доступа к своим данным Google Sheets: https://developers.google.com/sheets/api/quickstart/dotnet

Это сбивает с толку, но, хотя IAM - это современный механизм авторизации, используемый, например, для Службы Google Cloud Platform, другие службы Google не используют IAM, а вместо этого используют области OAuth для определения доступа клиента к методам API.

Итак, да, запись журнала IAM неверна, поскольку вы, вероятно, ссылаетесь на роль, необходимую для записи клиента в ведение журнала Stackdriver.

См. Разделы Google Sheets (OAuth) здесь: https://developers.google.com/sheets/api/guides/authorizing

И помните, что пример кода:

static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };

Соответствует https://www.googleapis.com/auth/spreadsheets.readonly

Итак, вам нужно использовать: https://www.googleapis.com/auth/spreadsheets, и это соответствует:

static string[] Scopes = { SheetsService.Scope.Spreadsheets };

См. Область применения

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...