Google通讯录API:未经授权的请求的客户

时间:2016-02-15 17:02:03

标签: c# .net google-api google-contacts google-api-dotnet-client

我需要制作一个Windows服务,每天将联系人从数据库导出到我的Google通讯录帐户。

由于应用程序是服务而且帐户是我的,我不想/需要使用浏览器身份验证,但我设法设置了服务帐户。

我正在测试它,但是,现在,当我请求访问令牌时,我收到“请求的客户端未经授权”错误消息

首先,配置:我有我的“目的地”帐户,我想要导入联系人的帐户,即info@mydomain.com

在开发者控制台中,我以info@mydomain.com身份登录,创建了新凭据 - >服务帐户密钥为contactimporter@mydomain-123456.iam.gserviceaccount.com;我下载了.p12密钥并启用了域范围的委派

然后,我进入了Google Apps帐户的“管理”面板,然后进入 安全 - >显示更多 - >高级设置 - >管理API客户端访问

我输入了服务accont客户端ID和“https://www.google.com/m8/feeds/”作为范围

API Scope

最后,代码:

var _uName = "info@mydomain.com";
var _pWord = "password!";           //info@mydomain.com's password
var _aSrvE = "contactimporter@mydomain-123456.iam.gserviceaccount.com";

var certificate = new X509Certificate2(@"C:\Test\GoogleContactsExporter-123456789.p12", "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(_aSrvE)
           {
               Scopes = new string[] { "https://www.google.com/m8/feeds"},
               User = _uName
           }.FromCertificate(certificate));
var task = credential.RequestAccessTokenAsync(new CancellationToken());
task.Wait();

task.Wait()我得到了这个例外:

  

System.TypeInitializationException:L'inizializzatore di tipo di   'LibraryTest.GoogleContactsHelper'ha generato un'eccezione。 --->   System.AggregateException:Si sono verificati unoopiùerrori。 --->   Google.Apis.Auth.OAuth2.Responses.TokenResponseException:   错误:“access_denied”,说明:“请求的客户端未经授权。”,Uri:“” in   Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(任务   任务)   Google.Apis.Auth.OAuth2.ServiceAccountCredential.d__19.MoveNext()

我想我已经做好了一切,我不知道该怎么检查:任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:-1)

你使用旧的谷歌api授权方法。我不知道在这个时候是否受到支持。 尝试使用OAuth 2.0授权Google OAuth 2.0

Hopefuly这有帮助。

安德烈亚斯