クライアント(アンドロイド)で検証した後、サーバー側でユーザーのg +プロファイルにアクセスする必要があるクライアントとサーバーアプリがあります
これにより、クライアント側でIDトークンを取得しています
@Background
void getAccessToken() {
String scopes = "audience:server:client_id:xxxxxxxxxxxxx.apps.googleusercontent.com";
Log.d(TAG,scopes);
try {
accessToken = GoogleAuthUtil.getToken(this,mPlusClient.getAccountName(),scopes);
Log.d(TAG,accessToken);
getPlusFriends();
}
catch (IOException transientEx) {
Log.e(TAG, transientEx.getMessage());
return;
}
catch (UserRecoverableAuthException e) {
Log.e(TAG, e.getMessage());
accessToken = null;
}
catch (GoogleAuthException authEx) {
Log.e(TAG, authEx.getMessage());
return;
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
このブログhttp://www.tbray.org/ongoing/When/201x/2013/04/04/ID-Tokensで説明されているように、長い ID トークンが得られます。
そのトークンを自分のサーバーに送信することになっていると思います。そこで、それを access_token に変換するために何かをする必要があります。IDトークンを確認できますか? curlリクエストを送信することで良いです
https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=
このようなjson文字列を返します
{
"issuer": "accounts.google.com",
"issued_to": "xxxxxxxxxxxxxx.apps.googleusercontent.com",
"audience": "xxxxxxxxxxxxxx.apps.googleusercontent.com",
"user_id": "123456",
"expires_in": 3362,
"issued_at": 1382577073,
"email": "myemail@something",
"verified_email": true
}
PHPサーバー
\Config::load('google_api', 'google');
$key = Config::get('google.client_id');
$secret = Config::get('google.client_secret');
$scopes = Config::get('google.scopes');
$client = new Google_Client();
$client->setClientId($key);
$client->setClientSecret($secret);
$client->setScopes($scopes);
$client->setState('offline');
$client->authenticate($token);
ここで、issued_to は Google API コンソールの Android アプリのクライアント ID であり、対象者は Web アプリのクライアントです。これまでのところ正しいと思います。
だから今、私はphpクライアントを使用していますが、そこから何をすべきか本当にわかりません. ID トークンを使用して API クライアントを検証しようとしましたが、エラー 400 - OAuth2 アクセス トークンのフェッチ中にエラーが発生しました。メッセージ: 'invalid_grant' が表示されます。
そのIDトークンを使用してPHP Google+クライアントを認証しようとするのか、それともアクセストークンと交換する方法があるのか わかりません