Jusqu'à au moins la fin du mois de juin de cette année (2017) (mes utilisateurs sont des enseignants donc n'accédez pas beaucoup à nos applications pendant l'été ...) J'ai eu le flux de travail suivant.gapi grantOfflineAccess code_accès à refresh_token
Les utilisateurs se connecteraient via le Web en utilisant la bibliothèque gapi. Pour les nouveaux utilisateurs, signe réussi à appeler alors
gapi.auth2.getAuthInstance().currentUser.get().grantOfflineAccess()
pour obtenir un code qui a été ensuite envoyé à notre back-end Java aux échanges le code pour un refresh_token. Nous utilisons la bibliothèque google-api-client (v 1.22.0) pour vérifier le id_token de l'utilisateur qui est retourné lors de la connexion initiale, puis un appel REST pour obtenir le refresh_token retourné.
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://www.googleapis.com/oauth2/v4/token");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("code", r.getRefreshCode()));
pairs.add(new BasicNameValuePair("redirect_uri", "postmessage"));
pairs.add(new BasicNameValuePair("client_id", clientInfo.getClientId()));
pairs.add(new BasicNameValuePair("client_secret", clientInfo.getClientSecret()));
pairs.add(new BasicNameValuePair("grant_type", "authorization_code"));
post.setEntity(new UrlEncodedFormEntity(pairs));
org.apache.http.HttpResponse response = client.execute(post);
String responseBody = EntityUtils.toString(response.getEntity());
au moins jusqu'à Juin, l'appel REST retourné un objet JSON sous la forme suivante
{
access_token: '',
token_type: '',
expires_in: 3600,
id_token: '',
refresh_token: ''
}
... Mais maintenant (dans les deux dernières semaines de toute façon), le jeton de rafraîchissement est pas inclus dans la réponse de l'appel REST. Qu'est-ce qui a changé, ou que dois-je faire différemment pour que le refresh_token soit utilisé par nos serveurs?
Dans le OAuth 2.0 Playground fourni par Google, quand on utilise les mêmes champs que mon application et l'échange le « code » pour un jeton de rafraîchissement, je reçois un objet de retour avec
{
"access_token": "",
"token_type": "",
"expires_in": 3600,
"refresh_token": ""
}
Alors, évidemment le Playground fait quelque chose différemment que moi. J'ai regardé la demande envoyer dans le débogueur Chrome et il ressemble à ce que je fais.