Использование .Net для доступа к Google Sheets с учетной записью службы выдает ошибку «У вызывающего абонента нет разрешения [403]» - PullRequest
1 голос
/ 02 апреля 2019

Я использую .Net (и я установил пакет NuGet) для доступа к Google Sheets с использованием служебной учетной записи.У меня есть аккаунт Google API, я создал сервисный аккаунт и даже тестовый лист для работы.Я включил файл JSON, в котором описаны учетные данные, которые я скачал с созданной учетной записи службы.Кажется, все работает, кроме того, что когда я использую вызов метода Execute, я получаю следующую ошибку:

У вызывающей стороны нет разрешения [403] Сообщение [У вызывающей стороны нет разрешения] Местоположение [-] Причина[запрещено] Домен [глобальный]

на Google.Apis.Requests.ClientServiceRequest`1.<ParseResponse>d__34.MoveNext()

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

Мой код выглядит так:

string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
string ApplicationName = "My Unit Test";

GoogleCredential sac;

        using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
        {
            sac = GoogleCredential.FromStream(stream).CreateScoped(Scopes);
        }


// Create Google Sheets API service.
        var service = new SheetsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = sac,
            ApplicationName = ApplicationName,
        });

String spreadsheetId = "1_aeTu4YxDKrqDBvCNR1awyo_7WDha0JBVo1jLxsz3pA";
        String range = "Export!A2:E";
        SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range);

ValueRange response = request.Execute(); // Exception thrown here

Мне нужно выполнитьдля успешного входа в систему и доступа к настройке Google Sheet I.Кто-нибудь видел это или знает способ обойти это?

1 Ответ

0 голосов
/ 11 апреля 2019

Никто не ответил, и я нашел исправление самостоятельно.Аккаунт gmail, который я использовал для тестирования, был специализированным рабочим доменом.Это не позволило мне правильно поделиться листом.Итак, я настроил новую учетную запись Google, добавил все учетные записи apis и service. Добавил соответствующую роль в учетную запись службы.Создан новый закрытый ключ JSON.Создал лист с этой новой учетной записью и поделился ею с новой учетной записью службы ... это работает.ВАЖНО! Вы должны поделиться листом с учетной записью службы, иначе он не будет работать.

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