Google Calendar API ServiceAccountCredential

时间:2018-04-17 02:39:35

标签: c# google-calendar-api

我正在尝试使用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;
    }

1 个答案:

答案 0 :(得分:0)

您需要与您的服务帐户共享您的个人日历。为此,请转到您日历的设置,然后在“与特定人员共享”下输入您的服务帐户的电子邮件地址(例如 myserviceaccount@myprojectname.iam.gserviceaccount.com)