Google 有服务帐户问题的联系人 API

Google Contacts API with Service Account issue

所以,除了一个问题,我基本上已经完成了这项工作。我已经设置了一个 google 服务帐户,因此它可以访问我们的域联系人。并且可以完美批量查询!

但是如果我调用 cr.Retrieve("some-contact-url-here"),它会抛出一个错误,抱怨没有刷新令牌。不过我使用的是服务帐户,所以我在验证时没有获得刷新令牌。

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

您从 Google 开发人员控制台获得的服务帐户凭据包括生成的唯一电子邮件地址、客户端 ID 和至少一个 public/private 密钥对。您使用客户端 ID 和一个私钥来创建签名的 JWT 并以适当的格式构建访问令牌请求。然后您的应用程序将令牌请求发送到 Google OAuth 2.0 授权服务器,其中 returns 一个访问令牌。应用程序使用令牌访问 Google API。当令牌过期时,应用程序重复该过程。

查看此 page 了解更多信息。

好吧,基于我对 API 的几个小时的猛烈抨击,当您作为服务帐户进行身份验证时,看起来基本上没有办法获得刷新令牌。预期的行为,真的。

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

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

然后你可以更新|删除|等等。虽然效率很低。特别是如果您的联系人列表变得相当大。