Google oauth如何使用刷新令牌

时间:2013-09-10 17:52:02

标签: java android google-oauth

我可以从我的Android设备交换我的一次性使用令牌,用于accessToken和refreshToken。我想弄清楚如何使用refreshToken。我发现这个https://developers.google.com/accounts/docs/OAuth2WebServer#refresh适用于https请求,但我想知道java sdk中是否有一些地方可以处理刷新。我看了但却找不到一个。

2 个答案:

答案 0 :(得分:3)

你不需要。只需在每次HTTP对话之前调用GoogleAuthUtil.getToken(),GoogleAuthUtil将确保您获得一个有效的,并在必要时进行刷新。

编辑:哦,好的,他在服务器上这样做了。这是一些使用刷新令牌的java代码:

       String data = "refresh_token=" + mRefreshToken +
                "&client_id=" + Constants.WEB_CLIENT_ID +
                "&client_secret=" + Constants.WEB_CLIENT_SECRET +
                "&grant_type=refresh_token";
        byte[] body = data.getBytes();

        URL url = new URL(Constants.GOOGLE_TOKEN_ENDPOINT);
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setFixedLengthStreamingMode(body.length);
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.getOutputStream().write(body);

        body = XAuth.readStream(conn.getInputStream());
        JSONObject json = new JSONObject(new String(body));

        String accessToken = json.optString("access_token");
        if (accessToken == null) {
            throw new Exception("Refresh token yielded no access token");
        }

答案 1 :(得分:0)

为什么不为此使用Google API。

JsonFactory JSON_FACTORY = new JacksonFactory();
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();    
GoogleCredential refreshTokenCredential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build().setRefreshToken(yourOldToken);
refreshTokenCredential.refreshToken(); //do not forget to call this method
String newAccessToken = refreshTokenCredential.getAccessToken();