未经用户同意,在Android中处理过期的访问令牌

时间:2014-09-06 05:09:32

标签: android oauth-2.0 google-oauth gmail-api

我正在尝试在测试Android应用中使用新的Gmail API。 在与授权进度进行了多次斗争后,我发现具体而言,GoogleAuthUtil.getToken()方法没有返回足够的访问令牌,可用于访问Gmail API功能(尝试执行任何操作时都会返回403错误API)。 也就是说,我设法获得足够令牌的唯一方法是使用WebView和(安装的应用程序 - > API控制台上的其他客户端ID)进行身份验证过程。 所以在某种程度上,这是一个双赢局面,因为我最终可以使用API​​,但剩下的问题是当用于API调用的访问令牌将过期或被泄露时会发生什么? 有没有办法在不弹出同意屏幕的情况下接收新令牌?所有用户都已批准该申请后。

非常感谢。

编辑:以下是使用刷新令牌获取新令牌的方法:感谢@Noam

        httpClient = new DefaultHttpClient();
        httpPost = new HttpPost(address);
        params.add(new BasicNameValuePair("refresh_token", token));
        params.add(new BasicNameValuePair("client_id", client_id));
        params.add(new BasicNameValuePair("client_secret", client_secret));
        params.add(new BasicNameValuePair("grant_type", "refresh_token"));
        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        httpPost.setEntity(new UrlEncodedFormEntity(params));
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

1 个答案:

答案 0 :(得分:1)

您可以使用GoogleAuthUtil.getToken(),只需添加范围" https://www.googleapis.com/auth/gmail.readonly"使用builder.addScope()。