使用Google API异常创建联系人-拒绝写访问

时间:2018-07-02 12:34:30

标签: c# google-api google-contacts

我正在尝试使用ASP .NET Core(c#)中的Google API创建google联系人。但是,它引发了如下异常:

  

对gmail的写访问被拒绝。

我正在使用https://www.google.com/m8/feeds/contacts/进行获取/发布。找不到我想念的地方。

是否可以使用普通的Gmail帐户创建联系人。我应该遵循什么步骤?

预先感谢

1 个答案:

答案 0 :(得分:0)

  

对gmail的写访问被拒绝。

表示您无权写入用户帐户。

Contacts Data API提供两种类型的供稿:联系人供稿和联系人组供稿。

  

提要是私有的读/写提要,可用于查看和管理用户的联系人/组。由于它们是私有的,因此程序员只能使用经过身份验证的请求来访问它们。也就是说,该请求必须包含要检索其联系人的用户的身份验证令牌。有关身份验证的更多信息,请参见developer's guide

您可能还需要考虑以下内容。相比使用旧版api,这可能会让您的生活更轻松。

  1. 您应该使用google people api。
  2. 您应该使用google .net客户端库。
  3. 您需要通过身份验证才能将数据插入用户联系人。

验证示例

   private static UserCredential GetUserCredential(string clientSecretJson, string userName, string[] scopes)
        {
            try
            {
                if (string.IsNullOrEmpty(userName))
                    throw new ArgumentNullException("userName");
                if (string.IsNullOrEmpty(clientSecretJson))
                    throw new ArgumentNullException("clientSecretJson");
                if (!File.Exists(clientSecretJson))
                    throw new Exception("clientSecretJson file does not exist.");

                // These are the scopes of permissions you need. It is best to request only what you need and not all of them               
                using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
                {
                    string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                    credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);

                    // Requesting Authentication or loading previously stored authentication for userName
                    var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                                                                             scopes,
                                                                             userName,
                                                                             CancellationToken.None,
                                                                             new FileDataStore(credPath, true)).Result;

                    credential.GetAccessTokenForRequestAsync();
                    return credential;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Get user credentials failed.", ex);
            }
        }

Oauth2Authentication.cs