少なくとも今年6月の終わり(2017)まで(私のユーザーは先生のため、夏の間に私たちのアプリケーションにアクセスしていない...)私は以下の作業フローを持っていました。gapi grantOfflineAccess refresh_tokenへのアクセスコード
ユーザーは、gapiライブラリを使用してWeb経由でログインします。新規ユーザーの場合は、で成功した記号はその後、その後refresh_token用のコード取引所に当社のJavaのバックエンドに送信されたコードを取得するために
gapi.auth2.getAuthInstance().currentUser.get().grantOfflineAccess()
を呼び出します。 google-api-clientライブラリ(v 1.22.0)を使用して、最初のサインイン時に返されるユーザーのid_tokenを確認し、その後、refresh_tokenを取得するREST呼び出しを返します。
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());
は、少なくとも6月までは、REST呼び出しは、リフレッシュトークンがある(とにかく数週間以内に)今、次の形式
{
access_token: '',
token_type: '',
expires_in: 3600,
id_token: '',
refresh_token: ''
}
でJSONオブジェクトを返した...しかし、 REST呼び出しの応答には含まれません。
私たちのサーバーが使用するためにrefresh_tokenを取得するには、何が変更されましたか?明らかに、Googleが提供するOAuth 2.0の遊び場で
私は私のアプリと同じスコープを使用してリフレッシュトークンのための「コード」を交換するとき、私はそう
{
"access_token": "",
"token_type": "",
"expires_in": 3600,
"refresh_token": ""
}
バックオブジェクトを取得し、遊び場は私とは違ったやり方をしています。私は、Chromeデバッガで送信されたリクエストを見てきました。