在使用本地机器的服务帐户时出现以下错误
错误:invalid_grant ", Description: " ", Uri: " " .
参见下面的代码-
string[] scopes = new string[] {
AnalyticsService.Scope.Analytics
}; // view and manage your Google Analytics data
var keyFilePath = @
"c:xxxxxxx.p12"; // Downloaded from https://console.developers.google.com
var serviceAccountEmail = "xxxxx@developer.gserviceaccount.com"; // found https://console.developers.google.com
//loading the Key file
var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail) {
Scopes = scopes
}.FromCertificate(certificate));
var service = new AnalyticsService(new BaseClientService.Initializer() {
HttpClientInitializer = credential,
ApplicationName = "Analytics API Sample",
});
string profileId = "xxxxxx";
DataResource.RealtimeResource.GetRequest request = service.Data.Realtime.Get(String.Format("ga:{0}", profileId), "rt:activeUsers");
RealtimeData feed = request.Execute();
invalid_grant有两个常见的原因。
- 您的服务器时钟与NTP不同步。(解决方法:检查服务器时间,如果不正确,修复它。)
- 刷新令牌已超过限制。(解决方案:你无能为力,他们不能有更多的刷新令牌在使用)应用程序可以请求多个刷新令牌。例如,在用户希望在多台机器上安装应用程序的情况下,这很有用。在这种情况下,需要两个刷新令牌,每个安装一个。当刷新令牌的数量超过限制时,旧的令牌将失效。如果应用程序试图使用无效的刷新令牌,则返回invalid_grant错误响应。每对唯一的OAuth 2.0客户端和刷新令牌的限制是25个(注意,此限制可能会更改)。如果应用程序继续为相同的客户机/帐户对请求刷新令牌,一旦发出第26个令牌,先前发出的第一个刷新令牌将失效。第27个请求的刷新令牌将使先前发出的第二个令牌无效,依此类推。
我也读到第三个,如果你不包括access_type=offline
在你的请求。我从来没有遇到过这个问题