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));