"Пользователь не авторизован для выполнения этого действия" при создании темы издателя

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

Мы используем два C# API V 1.35.1 и Google PubSub V 1.0 Beta 20.

Это работает, если мы регистрируем pub / sub для учетной записи разработчика. Но если мы попытаемся с помощью стандартного аккаунта, это не получится.

Для создания темы у нас есть эти методы.

 public PublisherServiceApiClient GetPublisher()
 {
            GoogleCredential cred = GoogleCredential.FromAccessToken(GmailCredentials.Token.AccessToken);
            Channel channel = new Channel(PublisherServiceApiClient.DefaultEndpoint.Host,
                PublisherServiceApiClient.DefaultEndpoint.Port, cred.ToChannelCredentials());

            var settings = PublisherServiceApiSettings.GetDefault();
            return PublisherServiceApiClient.Create(channel, settings);
}

public Topic CreateTopic()
{ 
            var publisherService = GetPublisher();

            var topicName = new TopicName(GmailProjectId, GMailVenueTopic);
            Topic topic = publisherService.CreateTopic(topicName);
            return topic;

}

Отказ происходит в:

publisherService.CreateTopic(topicName); 

с исключением

Grp.Core.RpcExcetion

и сообщение:

“Status(StatusCode=PermissionDenied, Detail="User not authorized to perform this action.")”

Это разрешения, запрошенные во время входа в систему через oauth с использованием API аутентификации gmail.

GoogleWebAuthorizationBroker.AuthorizeAsync

Это области, которые добавляются

public string GmailScopes => "https://mail.google.com/ " +
 "https://www.googleapis.com/auth/gmail.compose " +
 "https://www.googleapis.com/auth/gmail.insert " +
 "https://www.googleapis.com/auth/gmail.modify " +
 "https://www.googleapis.com/auth/gmail.send " +
 "https://www.googleapis.com/auth/gmail.labels " +
 "https://www.google.com/m8/feeds/ " +
 "https://www.googleapis.com/auth/contacts" +
 "https://www.googleapis.com/auth/contacts.readonly " +
 "https://www.googleapis.com/auth/admin.directory.user " +
 "https://www.googleapis.com/auth/admin.directory.group.member " +
 "https://www.googleapis.com/auth/admin.directory.group " +                                     
 "https://www.googleapis.com/auth/gmail.readonly " +
 "https://www.googleapis.com/auth/cloud-platform " +
 "profile " + "email";

В: Есть ли пропущенная область, которая требуется, когда мы используем стандартную учетную запись, а не учетную запись разработчика?

В: Может ли это быть как-то связано с тем, что C# API находится в бета-версии?

Примечание. Это дополнительные комментарии. ------------------------------------------

Позвольте мне объяснить, что мы пытаемся сделать. Чтобы быть уверенным, что выбранный нами подход совместим с тем, что предоставляет API Gmail?

В настоящее время у нас есть серверное приложение с таким рабочим процессом:

  • Просит мобильное устройство получить свой токен oauth и отправляет его на наш
    сервер.
  • Создайте поток, где наш сервер соединяется через IMAP, используя
    Мобильные телефоны.
  • Использует imap idle() для прослушивания новых событий электронной почты.

Мы пытаемся заменить этот дизайн подходом, основанным на REST. Мы не хотим порождать сотни потоков с открытыми сокетами в IMAP.

Из ваших ответов мы считаем, что нам необходимо сделать следующее:

  • Из учетной записи владельцев проектов, добавьте учетную запись каждого клиента в наш IAM с ролью Pub/Sub Subscriber
  • Из учетной записи конечного пользователя войдите в gmail-api, используя учетные данные OAuth, и каждый день вызывайте "watch", чтобы подписка оставалась активной.

Проблемы с этим подходом:

  • Мы создаем приложение SAS. Пользователи не являются членами нашей организации.
  • Все учетные записи пользователей необходимо будет добавить в нашу организацию IAM с ролью Pub/Sub Subscriber
  • Мы не видим никаких API-интерфейсов, позволяющих нам добавлять пользователей в наш IAM, мы должны пройти через консоль.

Не уверен, что мы ошиблись здесь. Заранее спасибо за ваш отзыв.

0 ответов

У меня была такая же проблема, когда я пытался отправить сообщение в Google Pub/Sub. Я решил проблему, добавивPub/Sub Admin роль члена в IAM раздел.

Другие вопросы по тегам