GoogleAnalytics ServiceAccount auth

时间:2015-09-28 15:12:19

标签: ruby oauth-2.0 google-analytics-api

在尝试将Legato gemservice accounts一起使用时,我们收到来自Google Authorization failed. Server message: { "error" : "invalid_grant” }的错误。

def token
  OAuth2::AccessToken.new(oauth_client, client_authorization.access_token,
    expires_in: 1.hour
  )
end

def oauth_client
  OAuth2::Client.new("", "", {
    authorize_url: "https://accounts.google.com/o/oauth2/auth",
    token_url: "https://accounts.google.com/o/oauth2/token",
  })
end

def client_authorization
  @_client_authorization ||= client.authorization = service_account.authorize
end

def service_account
  Google::APIClient::JWTAsserter.new({{ secret email address }},
                                     "https://www.googleapis.com/auth/analytics.readonly",
                                     key)
end

def key
  Google::APIClient::KeyUtils.load_from_pem({{ secret keyfile path }}, {{ not so secret keyfile passphrase }})
end

def client
  Google::APIClient.new(
    application_name: {{ app name }},
    application_version: 1,
  )
end

我们知道一些事情:

  1. 密钥文件/密码正常工作。如果不是,我们会看到“无效的密钥文件或密码短语”。
  2. 代码在开发中工作(一致且符合预期)
  3. 假设问题:

    1. 我们只能为服务帐户生成一个授权(每小时)吗?
    2. 我们是否需要以某种方式共享服务器之间的授权?
    3. 我们是否需要手动获取令牌并使用它?
    4. 是否存在不适用于localhost的IP限制?

1 个答案:

答案 0 :(得分:1)

导致invalid_grant错误的常见问题有两个:

  1. 您的服务器时钟与NTP不同步
  2. 您已超出刷新令牌限制
  3. 可以找到更多详细信息here