2013-09-10 3 views
4

Я могу обменять мой токен времени использования с моего устройства Android для доступаToken и refreshToken. Я пытаюсь выяснить, как использовать refreshToken. Я нашел это https://developers.google.com/accounts/docs/OAuth2WebServer#refresh, который работает по запросу https, но мне было интересно, есть ли где-то в java sdk для обработки обновления. Я посмотрел, но не смог его найти.Google oauth, как использовать токен обновления

+0

Вы проверили библиотеку java-клиент для API Google Apps? https://code.google.com/p/google-api-java-client/wiki/OAuth2 «GoogleCredential автоматически заботится о« обновлении »токена, что просто означает получение нового токена доступа. средство долговременного токена обновления, которое обычно принимается вместе с токеном доступа, если вы используете параметр «access_type = offline» во время потока кода авторизации (см. GoogleAuthorizationCodeFlow.Builder.setAccessType (String)) » – Emily

+0

Я не использовать GoogleAuthorizationCodeFlow, чтобы генерировать мой маркер из устройства я использовать GoogleAuthUtil.getToken (mContext, mAccountName, \t \t \t \t \t \t областей); я не вижу метод для установки access_type – user1634451

ответ

3

Вам не нужно. Просто вызовите GoogleAuthUtil.getToken() перед каждым HTTP-разговором, и GoogleAuthUtil будет убедиться, что вы получаете тот, который работает, при необходимости обновляя.

EDITED: О, хорошо, он делает это на сервере. Вот код 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"); 
     } 
+0

Я не делаю http-запросы на устройстве Android. Я обмениваю его на сервере для автономного доступа – user1634451

+0

ОК, обновил ответ –

+0

Почему вы вставляете секрет клиента сервера на клиентское устройство? – interlude

Смежные вопросы