带有服务帐户问题的Google通讯录API

时间:2015-06-10 17:07:19

标签: c# google-api-dotnet-client google-shared-contacts

所以,除了一个问题,我基本上已经开始工作了。我已经设置了Google服务帐户,因此可以访问我们的域名联系人。它可以完美地批量查询它们!

但是如果我调用cr.Retrieve(“some-contact-url-here”),它会因为没有刷新令牌而引发错误。我使用的是服务帐户,因此在进行身份验证时,我没有获得刷新令牌。

对于我应该如何获得服务帐户的刷新令牌,我似乎找不到任何好的答案。有一个或两个stackoverflow帖子主动提到使用服务帐户获取刷新令牌....但他们链接到的内容已被重定向。我发现用刷新令牌做的其他事情基本上都是关于手动验证和存储令牌。因为我需要使用服务帐户,所以不可能。

2 个答案:

答案 0 :(得分:0)

您从Google Developers Console获得的服务帐户凭据包括生成的唯一电子邮件地址,客户ID以及至少一个公钥/私钥对。您使用客户端ID和一个私钥来创建签名的JWT,并以适当的格式构造访问令牌请求。然后,您的应用程序会将令牌请求发送到Google OAuth 2.0授权服务器,后者会返回访问令牌。该应用程序使用令牌访问Google API。当令牌过期时,应用程序会重复该过程。

查看此page以获取更多信息。

答案 1 :(得分:0)

好的,基于几个小时的暴力攻击API,看起来当您作为服务帐户进行身份验证时,基本上无法获得刷新令牌。预期的行为,真的。

无论如何,要解决这个问题,你可以将所有联系人加载到内存中,

feed.AutoPaging = true;
foreach (var c in feed.Entries)
{
    contactList.Add(c);
}

然后你可以更新|删除|等。但是效率非常低。特别是如果你的联系人名单变得相当大。