0

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

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

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

4

2 回答 2

0

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

查看此页面了解更多信息。

于 2015-06-10T20:46:22.947 回答
0

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

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

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

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

于 2015-06-10T21:32:10.067 回答