Google API:Gmail 服务推送通知(观看)- 用户无权执行此操作
Google API: Gmail Service Push Notification (Watch) - User not authorized to perform this action
我正在尝试在邮箱上调用 watch()。我设置了一个服务 Iam 帐户,并创建了一个主题和订阅。我向我的服务帐户授予了对我的主题和订阅的完全(所有者)权利。但是在 watch() 上调用 execute 时,出现错误:
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
您需要记住服务帐户不是您。服务帐户是一个虚拟用户,它有一个 google 驱动器帐户和一个 google 日历帐户,可能还有更多。但是它没有 有一个 gmail 帐户。
服务帐户已预授权。您需要授予服务帐户访问权限才能阅读用户的电子邮件。
userId 需要是您希望访问其电子邮件的用户的 ID。 'Me' 将无法工作,因为 serveries 帐户没有 gmail 帐户,它没有电子邮件可供阅读。
我没有授予 gmail 用于发布更新的服务帐户 Pub/Sub 发布到主题 (TopicName) 的权限:serviceAccount:gmail-api-push@system.gserviceaccount.com
我在控制台中授予此帐户权限。
只需要范围:
https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/pubsub
在云端 Pub/Sub 开发者控制台您需要授予 serviceAccount:gmail-api-push@system.gserviceaccount.com
发布权限
我正在尝试在邮箱上调用 watch()。我设置了一个服务 Iam 帐户,并创建了一个主题和订阅。我向我的服务帐户授予了对我的主题和订阅的完全(所有者)权利。但是在 watch() 上调用 execute 时,出现错误:
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
您需要记住服务帐户不是您。服务帐户是一个虚拟用户,它有一个 google 驱动器帐户和一个 google 日历帐户,可能还有更多。但是它没有 有一个 gmail 帐户。
服务帐户已预授权。您需要授予服务帐户访问权限才能阅读用户的电子邮件。
userId 需要是您希望访问其电子邮件的用户的 ID。 'Me' 将无法工作,因为 serveries 帐户没有 gmail 帐户,它没有电子邮件可供阅读。
我没有授予 gmail 用于发布更新的服务帐户 Pub/Sub 发布到主题 (TopicName) 的权限:serviceAccount:gmail-api-push@system.gserviceaccount.com
我在控制台中授予此帐户权限。
只需要范围:
https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/pubsub
在云端 Pub/Sub 开发者控制台您需要授予 serviceAccount:gmail-api-push@system.gserviceaccount.com
发布权限