我正在尝试使用Google的Calendar API。我几乎使用了.NET Quickstart页面中的确切代码。我想使用ServiceAccountCredential对象,而不是使用UserCredential对象,因此我可以使用我的服务帐户进行身份验证。当我使用UserCredential对象进行身份验证时,代码工作正常,但我不想依赖拥有Google帐户的用户。当我尝试使用ServiceAccountCredential对象进行身份验证时,我没有从日历中获得任何结果。我也没有得到任何错误,只是没有结果。以下是获取ServiceAccountCredential的方法。有谁知道我错过了什么?
private ServiceAccountCredential GetServiceAccountCredential()
{
ServiceAccountCredential credential = null;
string[] scopes = { CalendarService.Scope.Calendar };
using (var stream = EmbededResourceHelper.ExtractResourceAsStream("<<downloaded json file>>.json"))
{
var credentialParameters = NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(stream);
if (credentialParameters.Type != "service_account"
|| string.IsNullOrEmpty(credentialParameters.ClientEmail)
|| string.IsNullOrEmpty(credentialParameters.PrivateKey))
throw new InvalidOperationException("JSON data does not represent a valid service account credential.");
credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(credentialParameters.ClientEmail)
{
Scopes = scopes,
}.FromPrivateKey(credentialParameters.PrivateKey)
);
}
return credential;
}
答案 0 :(得分:0)
您需要与您的服务帐户共享您的个人日历。为此,请转到您日历的设置,然后在“与特定人员共享”下输入您的服务帐户的电子邮件地址(例如 myserviceaccount@myprojectname.iam.gserviceaccount.com)