4

我似乎错过了 oauth2 的一些东西。我明白了,access_token但没有id_token

我使用以下内容通过传递授予我的“代码”来获得 google access_tokenhttps://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);

一切似乎都有效,但根据谷歌的文档https://developers.google.com/accounts/docs/OAuth2Login#exchangecode我应该得到access_token, id_token, expires_in, token_type我所做的,除了id_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 回答
0

首先,您需要为response_type添加id_token。然后你需要检查范围。并且不要忘记对于隐式流随机数参数是必需的。

有关更多信息和示例,您可以查看: http: //openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest

于 2017-10-31T15:28:17.720 回答