Google APIs Client Library for .NET で OAuth 2.0 認証(サービスアカウント)すると、Google.Apis.Requests.RequestError エラーが出る場合の対応方法

投稿者: | 1月 4, 2015

Google APIs Client Library for .NETの解説ページで、Service accountのサンプルプログラムが掲載されている。しかし、このコード、エラーが出てしまう。

エラー内容は次のとおり。

Google.Apis.Requests.RequestError
Caller does not have access to the customers reporting data. [403]
Errors [
    Message[Caller does not have access to the customers reporting data.] Location[ – ] Reason[forbidden] Domain[global]
]

これは、サービス認証をどのユーザーアカウントで実施するかを指定していないから。
なので、特権管理者アカウントなど、APIアクセスできるアカウントをUserプロパティで指定してあげるといい。

            var certificate = new X509Certificate2(HostingEnvironment.MapPath(@"~/key.p12"), "notasecret", X509KeyStorageFlags.Exportable);
            ServiceAccountCredential credential = new ServiceAccountCredential(
               new ServiceAccountCredential.Initializer(serviceAccountEmail)
               {
                   Scopes = new[] { ReportsService.Scope.AdminReportsUsageReadonly },
                   User = "hoge@example.com"
               }.FromCertificate(certificate));

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください