谷歌通讯录 API 与服务帐户问题

本文关键字:问题 服务 通讯录 API 谷歌 | 更新日期: 2023-09-27 17:55:25

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

但是如果我打电话给cr。检索("some-contact-url-here"),它会抛出一个关于没有刷新令牌的错误。不过,我使用的是服务帐户,因此在进行身份验证时不会获得刷新令牌。

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

谷歌通讯录 API 与服务帐户问题

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

查看此页面以获取更多信息。

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

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

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

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