API Google: push-уведомление службы Gmail (просмотр) — пользователь не авторизован для выполнения этого действия

Я пытаюсь вызвать watch() для почтового ящика. Я настроил учетную запись службы Iam, создал тему и подписку. Я предоставил своему сервисному аккаунту полные права (владельца) на мою тему и подписку. Но при вызове execute на watch() я получаю сообщение об ошибке:

Google.Apis.Requests.RequestError Error sending test message to Cloud PubSub projects/projectid/topics/topicname : User not authorized to perform this action. [403] Errors [ Message[Error sending test message to Cloud PubSub projects/projectid/topics/topicname : User not authorized to perform this action.] Location[ - ] Reason[forbidden] Domain[global] ]

Вот код, который я использую для настройки своего сервиса:

 credential = new X509Certificate2("file.p12"), "password", X509KeyStorageFlags.Exportable);
var service = new GmailService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = applicationame,
        });


WatchRequest body = new WatchRequest()
    {
        TopicName = "projects/projectid/topics/topicname",
        LabelIds = new[] {"INBOX"}
string userId = "me";
UsersResource.WatchRequest watchRequest = service.Users.Watch(body, userId);
WatchResponse test = watchRequest.Execute();

Моя учетная запись службы имеет доступ ко всем следующим областям:

https://mail.google.com/
https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.metadata

Я что-то упустил здесь?

РЕДАКТИРОВАТЬ

Добавлена ​​​​следующая область, но все еще безуспешно: https://www.googleapis.com/auth/pubsub

РЕДАКТИРОВАТЬ Также безуспешно добавлено следующее: https://www.googleapis.com/auth/cloud-platform


comment
У меня нет доступа к учетной записи доменов Google, поэтому я не могу ее проверить. Однако я видел проблему раньше. Это связано с разрешением учетных записей служб, у которого нет разрешения для этого пользователя.   -  person DaImTo    schedule 24.02.2017
comment
@DaImTo, о каком пользователе вы говорите? До сих пор я дал разрешение электронной почты учетной записи службы на эту тему. Вы имеете в виду, что электронной почте служебной учетной записи нужны некоторые права на фактическую отслеживаемую учетную запись gmail, даже если служебная учетная запись была создана учетной записью gmail?   -  person jpo    schedule 24.02.2017


Ответы (3)


Я не давал сервисной учетной записи, которую gmail использует для публикации обновлений в Pub/Sub, разрешение на публикацию в теме (TopicName): serviceAccount:[email protected] Я дал этой учетной записи разрешение в консоли.

person jpo    schedule 10.04.2017
comment
+1 Вы спасли мой день .. последние два дня я столкнулся с одной и той же проблемой .. ваша информация мне помогла и я ее получил. Спасибо - person PHP CODER; 08.11.2017
comment
Спасибо за указание на это!!. это было немного раздражает, чтобы найти. Документы для справки: developers.google.com/gmail/api/guides/ - person spaceMonkey; 09.11.2020

Вы должны помнить, что сервисный аккаунт — это не вы. Учетная запись службы — это фиктивный пользователь, у которого есть учетная запись Google Диска, учетная запись календаря Google и, возможно, еще много чего. Однако у него нет учетной записи gmail.

Сервисные аккаунты предварительно авторизованы. Вам необходимо предоставить служебной учетной записи доступ для чтения электронной почты пользователей.

userId должен быть идентификатором пользователя, к электронной почте которого вы хотите получить доступ. «Я» не будет работать, потому что у учетной записи serveries нет учетной записи gmail, у которой нет писем для чтения.

person DaImTo    schedule 24.02.2017
comment
Я предоставил доступ к служебной учетной записи, предоставив cientId соответствующие области. Кроме того, я попытался изменить меня на имя пользователя Gmail, но ошибка не устранена. - person jpo; 25.02.2017
comment
как вы предоставляете служебной учетной записи доступ для чтения электронной почты пользователя? - person jpo; 01.03.2017
comment
Попробуйте адрес электронной почты пользователя. У меня больше нет доступа к учетной записи домена, поэтому я не могу подсказать, как предоставить ей доступ. - person DaImTo; 01.03.2017

Просто нужны области:

https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/pubsub

В консоли разработчика Cloud Pub/Sub вам необходимо предоставить права публикации для serviceAccount:[email protected]

person Lelia Rubiano    schedule 06.12.2017
comment
Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки . См. здесь инструкции по написанию лучших ответов на основе ссылок. Спасибо! - person GhostCat; 06.12.2017