无法验证Google访问令牌(错误的段数)

时间:2017-01-22 23:15:50

标签: php google-api jwt google-api-php-client google-api-client

我的代码非常简单directly from Google's website

$client = new Google_Client(['client_id' => $CLIENT_ID]);

$payload = $client->verifyIdToken($id_token);

if ($payload) {
  $userid = $payload['sub'];
  echo $userid;
} else {
  // Invalid ID token
  echo "error";
}

我收到以下错误:

<b>Fatal error</b>:  Uncaught exception 'UnexpectedValueException' with message 'Wrong number of segments' in /../vendor/firebase/php-jwt/src/JWT.php:79
Stack trace:
#0 /../vendor/google/apiclient/src/Google/AccessToken/Verify.php(103): Firebase\JWT\JWT::decode('ya29.GlzbAwEXTe...', '-----BEGIN PUBL...', Array)
#1 /../vendor/google/apiclient/src/Google/Client.php(713): Google_AccessToken_Verify-&gt;verifyIdToken('ya29.GlzbAwEXTe...', '1074005180734-g...')
#2 /../pages/auth/session.php(7): Google_Client-&gt;verifyIdToken('ya29.GlzbAwEXTe...')

有谁知道这是为什么?

3 个答案:

答案 0 :(得分:1)

POST

中传递时,我使用了access_token而不是id_token

答案 1 :(得分:1)

回答这个问题,因为另一个问题太短暂而且含糊不清。

不是传递profile.getId()返回的ID,而是将googleUser.getAuthResponse().id_token返回的ID作为id_token id请求POST字段传递给您用于将用户的ID发送到您的服务器。)

对于任何开发人员来说都是一个很好的提示:如果你认为你做了你应该做的所有事情,并且它正在为他们工作,但它不适合你,那么你没有做你应该做的一切。 / p>

答案 2 :(得分:1)

我遇到了同样的问题而没有得到任何修复。我不得不改变我获取用户信息的方式。我没有使用$client->verifyIdToken();,而是以这种方式使用了服务类:

$authService=new Google_Service_Oauth2($client);
    if($client->getAccessToken()){
        $data=$authService->userinfo->get();
    }

因此,要获取当前用户的电子邮件,我使用了$email=data['email'];

希望这有效!