2

メールボックスでwatch()を呼び出そうとしています。私はサービスのIAMアカウントを設定し、トピックと執筆を作成しました。私は自分のトピックとサブスクリプションに対してサービスアカウントに完全な(所有者)権利を与えました。 )(時計上で実行呼び出すときしかし、私はエラーを取得する:ここでGoogle API:Gmailサービスプッシュ通知(監視) - この操作を実行する権限がないユーザー

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 

ここに何か不足していますか?

EDIT

は成功を、以下の範囲を追加しましたが、それでもない:https://www.googleapis.com/auth/pubsub

EDIT もなし成功し、次を追加しました:https://www.googleapis.com/auth/cloud-platform

+0

私はGoogleドメインアカウントにアクセスできないので、テストすることはできません。しかし私は前にこの問題を見てきました。そのユーザーに許可されていないサービスアカウントのアクセス許可に戻ります。 – DaImTo

+0

@DaImどのユーザーを参照していますか?これまでは、サービスアカウントの電子メールの許可をトピックに与えました。サービスアカウントがGmailアカウントによって作成されていても、サービスアカウントのメールに実際のGmailアカウントの権限が必要であることを意味しますか? – jpo

答えて

1

gmailがトピック(トピック名)に公開するためのPub/Sub権限への更新を公開するためにgmailが使用するサービスアカウントを教えていませんでした:serviceAccount:[email protected]コンソールでこのアカウントの権限を与えました。

+0

+1過去2日間、私は同じ問題に遭遇しました..あなたの情報は私を助けました。とった。ありがとう – PHPCoder

0

は、サービスアカウントは、あなたではないことを覚えておく必要があります。サービスアカウントは、GoogleドライブアカウントとGoogleカレンダーアカウントを持っているダミーユーザーで、多分もっと多くのユーザーがいます。ただし、ではなく、にはGmailアカウントがあります。

サービスアカウントは事前認証されています。ユーザーの電子メールを読むためのアクセス権をサービスアカウントに与える必要があります。

ユーザーIDは、アクセスしたいメールのユーザーのIDである必要があります。 'me'は仕事ができません。なぜなら、serveriesアカウントには、読むべき電子メールがないgmailアカウントがないからです。

+0

私はcientIdに適切なスコープを与えてサービスアカウントへのアクセスを許可しました。また、「私」をGmailのユーザー名に変更しようとしましたが、エラーは解決しません。 – jpo

+0

サービスアカウントにユーザーの電子メールを読むためのアクセスをどのように許可しますか? – jpo

+0

ユーザーのメールアドレスをお試しください。私はもうドメインアカウントにアクセスできないので、アクセスを許可する方法についてあなたを導くことはできません – DaImTo

0

だけスコープを必要とする:クラウドパブ/サブデベロッパーコンソールで

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

あなたはserviceAccountに権限を公開付与する必要があります。[email protected]

+0

これは理論的に質問に答えるかもしれませんが、それは望ましいでしょう(// meta.stackoverflow。com/q/8259)に回答の重要な部分を含め、参照用のリンクを提供してください。 *より良い* "リンクベースの"回答を書く方法については、[here](https://meta.stackexchange.com/a/94027/285661)を参照してください。ありがとう! – GhostCat

関連する問題