无法使用Google OAuth 2获取刷新令牌

时间:2016-03-23 11:09:21

标签: android oauth oauth-2.0 google-api access-token

场合

我有简单的Android应用程序,其中用户使用REST api从Google Fusion Tables获取数据。为此,我使用OAuth 2授权来获取访问令牌和刷新令牌。我的应用程序中有Web视图,它将显示登录屏幕以及同意屏幕。我计划从Web视图获取访问令牌,并将其用于进一步的API调用。我正在使用retrofit来执行我的http调用。我使用以下查询参数,

"client_id" = CLIENTID
"client_secret" = SECRET
"code" = 4/XXXXXXXXXX  //Code got from redirect url
"grant_type" = "authorization_code"  
"access_type" = "offline"
"approval_prompt" = "force"
"redirect_uri" = REDIRECT_URL

到目前为止一切顺利。但是,当我使用上述查询参数对发布请求进行检查时,我得到了以下响应,

{
  "access_token": "ya29.XXXXXXXXXXXXXX",
  "token_type": "Bearer",
  "expires_in": 3599,
  "id_token": "XXXXXXXXXX"
}

问题

刷新令牌在哪里?我需要刷新令牌,因为我以后无法使用访问令牌通过应用程序进行API调用,并且我不希望用户每次都获得访问令牌。

我尝试了什么

我已经按照this帖子的说明操作,并尝试从设置中撤消对应用程序的权限。我也尝试使用不同的谷歌帐户,以防有一些许可问题,但仍然没有运气。我也尝试删除查询参数" approval_prompt"和" grant_type"但这也没有帮助。

2 个答案:

答案 0 :(得分:1)

我在搜索并敲头5-6小时后得到了答案。 This回答救了我!回答将来寻找此事的人,

请求访问令牌时添加“access_type”=“离线”查询,而不是交换,即在要求同意的网址中。

答案 1 :(得分:0)

您需要提供grant_type=offline来请求刷新令牌,而不是在授权请求中指定access_type=offline