创建发布者主题时“用户无权执行此操作”

Posted

技术标签:

【中文标题】创建发布者主题时“用户无权执行此操作”【英文标题】:"User not authorized to perform this action" when creating publisher topic 【发布时间】:2019-01-28 04:58:08 【问题描述】:

我们正在尝试创建一个发布者主题,以提供一个发布/订阅频道,以便在新消息通过 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.")”

这些是我们使用 gmail 身份验证 api 通过 oauth 登录时请求的权限。

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 处于测试阶段有关?

注意:这些是额外的 cmets ----------------------------------------- -

让我解释一下我们要做什么。确保我们采用的方法与 Gmail API 提供的方法兼容?

目前,我们有一个具有此工作流程的服务器应用程序:

要求移动设备获取他们的 oauth 令牌并将其发送到我们的 服务器。 创建一个线程,我们的服务器通过 IMAP 使用 手机 oauth 令牌。 使用 imap idle() 侦听新的电子邮件事件。

我们正在尝试用基于 REST 的方法来替换这种设计。我们不想生成 100 个线程,每个线程都有一个开放的 IMAP 套接字。

根据您的回答,我们认为我们需要执行以下操作:

从项目所有者帐户中,将每个客户的帐户添加到我们的 具有 Pub/Sub 订阅者角色的 IAM 从最终用户帐户,使用 OAuth 登录到 gmail-api 凭据并每天调用“watch”以保持订阅 活跃。

这种方法的问题是:

我们正在创建一个 SAS 应用程序。用户不是我们的成员 组织。 所有用户帐户都需要添加到我们的组织中 具有 Pub/Sub 订阅者角色的 IAM 我们没有看到任何允许我们将用户添加到 IAM 的 api,我们必须 通过控制台。

不确定我们在这里是否出错了。提前感谢您的反馈。

【参考方案1】:

当我尝试将消息推送到 Google Pub/Sub 时,我遇到了同样的问题。我通过将Pub/Sub Admin 角色添加到IAM 部分的成员来解决了这个问题。

【讨论】:

以上是关于创建发布者主题时“用户无权执行此操作”的主要内容,如果未能解决你的问题,请参考以下文章

错误 403:向 Cloud PubSub 发送测试消息时出错:用户无权执行此操作

T-SQL Server 代理作业失败“用户无权执行此操作”

Google IoT Core MQTT 发布错误

数据库项目 VS 2012 跳过发布安全

如何在 apache kafka 中创建主题?

创建 Kafka 主题时出错:- 复制因子大于可用代理