Учетная запись службы API Календаря Google Ошибка 401 Недействительные учетные данные - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь создать учетную запись службы календаря Google.

Вот мои учетные данные:

enter image description here

Вот мой сервис определение учетной записи (включено делегирование для учетной записи службы для всего сайта):

enter image description here

Вот моя страница «Управление доступом клиента API»:

enter image description here

И это мой код:

        string userName = "xxx@yyy.it";
        string[] Scopes = { CalendarService.Scope.Calendar, CalendarService.Scope.CalendarEvents };
        string ApplicationName = "Client per quickstart";
        ServiceAccountCredential credential = GoogleCredential.FromFile(@"path\credentialjson.json").CreateScoped(Scopes).CreateWithUser(userName).UnderlyingCredential as ServiceAccountCredential;

        // Create Google Calendar API service.
        var service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName
        });
        // THIS REQUEST FAILS!!  
        var y = service.CalendarList.List().Execute(); 

Служба создана правильно, но все запросы завершаются с ошибкой:

Код: 401, Сообщение: «Недействительные учетные данные», Расположение: «Авторизация»,> LocationType: «header», Причина: «authError», Домен: «global»

Не знаю понять, чего мне не хватает в заголовке авторизации.

Что мне следует установить перед запросом, который не был выполнен при создании сервиса? Спасибо!

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Ваша проблема связана с областями, которые вы используете одновременно, потому что вы устанавливаете CalendarService.Scope.CalendarEvents , эта будет иметь приоритет над CalendarService.Scope.Calendar , поскольку API-интерфейсы Google всегда выбирают в качестве приоритета наиболее ограниченную область действия (в данном случае CalendarEvents ).

И, как вы можете видеть в CalendarList: области списка конечных точек , CalendarService.Scope.CalendarEvents не является областью действия, которую можно использовать для попадания в конечную точку Вы хотели нажать.

Итак, в своем коде вы можете удалить дополнительный Scope и оставить его так:

string[] Scopes = { CalendarService.Scope.Calendar };
0 голосов
/ 14 февраля 2020

Вы видите текст поверх ваших учетных данных

Идентификаторы клиента OAuth 2.0

Go в консоли разработчика Google нажмите + create credentials выбрать учетную запись службы из выпадающего списка. Вам необходимо убедиться, что вы скачали ключ в порядке для учетной записи службы, а не для клиента Oauth2. В сообщении, которое вы видите, указано, что у вас неправильный тип клиента. Попробуйте снова загрузить файл ключа учетной записи службы.

пример учетных данных учетной записи службы

enter image description here

Вы создали учетные данные oauth2, а не учетную запись службы кредитные.

GoogleCredential credential;
                    using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read))
                    {
                        credential = GoogleCredential.FromStream(stream)
                             .CreateScoped(scopes);
                    }

                    // Create the  Analytics service.
                    return new CalendarService(new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "Calendar Service account Authentication Sample",
                    });
...