4

私はoauth2で何かを見逃しているようです。わかりますが、access_tokenわかりませんid_token

以下を使用して、私に付与された「コード」を渡すことにより、Google access_token を取得しますhttps://accounts.google.com/o/oauth2/auth

$oauth2token_url = "https://accounts.google.com/o/oauth2/token";
$clienttoken_post = array(
    "code" => $code,
    "client_id" => $client_id,
    "client_secret" => $client_secret,
    "redirect_uri" => $redirect_uri,
    "grant_type" => "authorization_code"
);

$curl = curl_init($oauth2token_url);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$json_response = curl_exec($curl);
curl_close($curl);
var_dump($json_response);

すべてが機能しているようですが、Google のドキュメントhttps://developers.google.com/accounts/docs/OAuth2Login#exchangecodeによるとaccess_token, id_token, expires_in, token_typeid_token

var_dump($json_response);以下を示します。

string(126) "{ "access_token" : "ya29.AHES6ZSGlHVW9qA23xs8bHBP578Ef8S5cntJIcPT_SHWA", "token_type" : "Bearer", "expires_in" : 3598 }

ここで何が欠けていますか?

4

2 に答える 2

14

トークン エンドポイントでは、特定のスコープが存在する場合にのみ id_token が発行されます。ドキュメントでそれを明確にする必要があります。

電子メール、プロファイル、または OpenID Connect スコープが使用された場合にのみ発行されます。それ以外の場合、id_token は意味がありません。

于 2013-08-09T21:40:33.117 に答える