我正在更新调用Google日历API的Web服务应用程序,以列出特定日历的日历事件并插入新的日历事件。我正在尝试将其升级到api的第3版。对于身份验证,我使用的是在Google Developers Console(https://console.developers.google.com)中创建的服务帐户凭据。我可以使用以下代码创建CalendarService:
using System;
using Google.Apis.Auth.OAuth2;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Services;
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
...
string SERVICE_ACCOUNT_EMAIL =
"....googleusercontent.com";
string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"C:\temp\API Project-123456789.p12";
// Create the service.
X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL)
{
Scopes = new[] { CalendarService.Scope.Calendar }
, User = "something@mycompany.com"
}.FromCertificate(certificate));
// Create the service.
var cs = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Calendar API Sample",
});
但是当我调用list方法来查询公共日历时:
Events events = service.Events.List(“something@mycompany.com”)。执行();
抛出TokenResponseException,并显示以下错误消息:
错误:“invalid_grant”,描述:“”,Uri:“”
仅供参考:我已进入公司的AdminHome并在安全管理客户API访问,并将上面的SERVICE_ACCOUNT_EMAIL注册到http://www.google.com/calendar/feeds/。
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
我认为你需要注册你的应用程序的服务帐户的客户端ID,我已经使用这种差异成功地使用了它。
这是我通过插入事件解决的类似问题。 Google API Calender v3 Event Insert via Service Account using Asp.Net MVC
以下是有关域范围授权的Google文档。 https://developers.google.com/+/domains/authentication/delegation