PHP 5.4.45およびGoogle APIクライアントPHPライブラリバージョン2.1.1を使用して、サーバー側のWebアプリケーションにGoogle OAuth 2.0を使用しています。PHPのGoogle IDトークンの情報がありません
私は成功しrefresh_token
、access_token
とid_token
でauthorization code
を交換することができ、私は正しくid_tokenを確認し、そこからユーザーのデータを抽出しますが、いくつかの情報が不足していることができます。
私が正しく同意画面で、ユーザーのアプリケーション設定で表示されます両方profile
とemail
スコープを、要求された、しかし、電子メールが利用可能である一方で、profile
スコープに関連付けられたすべての請求がid_tokenから欠落している(名、写真など)。
私はさまざまなユーザーで試してみましたが、問題は解決しません。
これは私が(ちょうどテストの目的のために)使用しているコードです:
require_once 'php/libs/google_api_client_library/vendor/autoload.php';
if(!isset($_GET['code'])){
die("code parameter not set");
}else{
//exchange 'code' with access token, refresh token and id token
$data = array(
'code' => $_GET['code'],
'client_id' => $MY_CLIENT_ID,
'client_secret' => $MY_CLIENT_SECRET,
'redirect_uri' => 'https://www.mywebsite.com/oauth2callback.php',
'grant_type' => 'authorization_code'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$response = file_get_contents('https://accounts.google.com/o/oauth2/token', false, stream_context_create($options));
if($response){
$tokens = json_decode($response);
$client = new Google_Client();
//validate idToken and get user info
$idtoken = $client->verifyIdToken($tokens->id_token);
echo "<h1>ID_TOKEN</h1>";
var_dump($idtoken);
}
}
奇妙なことは、それが前に正常に動作するために使用することで、それが突然、そのように振る舞う始めた、と私ドンこのコードを変更することを忘れないでください。
JavaScript APIクライアントライブラリですべてがうまくいくので、これはPHPでサーバーサイドでのみ発生することに気付きました。
これはなぜ起こっているのですか?
詳細情報と事前の感謝が必要な場合はお知らせください。
何を試しましたか? –
私はオンラインとオフラインの 'access_type'の両方で異なるGoogleアカウントを使用しようとしましたが、何も変わりませんでした。 私はクエリ文字列に 'fetch_basic_profile = true'を、' scopes'に 'openid'を含めてみました。これはいくつかの例で見たことがあるが運がないからです。 私はまた、PHPライブラリを使ってid_tokenから抽出したデータが、Googleのtokeninfoエンドポイントによって返されたものと同じであることを確認しました。 –