"Пользователь не авторизован для выполнения этого действия" при создании темы издателя
Мы пытаемся создать тему издателя, чтобы обеспечить паб / подканал, который будет уведомляться, когда новые сообщения поступают через 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
раздел.