Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
令牌中的段数错误(带php的OAuth Google Api)_Php_Google Oauth_Google Api Php Client - Fatal编程技术网

令牌中的段数错误(带php的OAuth Google Api)

令牌中的段数错误(带php的OAuth Google Api),php,google-oauth,google-api-php-client,Php,Google Oauth,Google Api Php Client,我有一个php应用程序,它使用OAuth2对用户帐户进行身份验证 直到昨天,一切都很顺利 但是今天,在不改变代码的情况下,当我尝试访问我的帐户,并且在我验证了我的google帐户后,我获得了一个空白页面 我调试了代码,发现当Google_客户端尝试验证IDToken,更确切地说是在函数verifySignedJwtWithCerts中时,代码崩溃了,因为:$segments=explode(“.”,$jwt)查找4段而不是3段 这是我的密码: ... $client = new Google_C

我有一个php应用程序,它使用OAuth2对用户帐户进行身份验证

直到昨天,一切都很顺利

但是今天,在不改变代码的情况下,当我尝试访问我的帐户,并且在我验证了我的google帐户后,我获得了一个空白页面

我调试了代码,发现当Google_客户端尝试验证IDToken,更确切地说是在函数verifySignedJwtWithCerts中时,代码崩溃了,因为:
$segments=explode(“.”,$jwt)查找4段而不是3段

这是我的密码:

...
$client = new Google_Client();
$client->setClientId($clientId);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectUri);
$client->setScopes("email");

if(!isset($_GET['code']))
    header("Location: ".$client->createAuthUrl());
else
{
    $client->authenticate($_GET['code']);
    $_SESSION["access_token"] = $client->getAccessToken();


    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
      $client->setAccessToken($_SESSION['access_token']);
    } else {
      $authUrl = $client->createAuthUrl();
    }

    $ticket = $client->verifyIdToken();
    if ($ticket) {
        $admin = $ticket->getAttributes();

    }
    $_SESSION["email"] = $admin["payload"]["email"];

    ...
有人能解释一下吗?
提前感谢

我怎么在谷歌上找不到任何答案。因此,我将分享我所做的工作,使其发挥作用

简短的回答是:因为您在verifyIdToken()中使用的令牌无效

答案如下:

我不确定这是否是正确的步骤:

  • 谷歌登录认证后,我们将获得“授权” “代码”来自(用于测试)。使用前,请在设置中输入您的
    oauth客户端\u id
    oauth客户端密码
  • 我已经使用“授权码”通过写入来获取其他令牌
    $token=$client->fetchAccessTokenWithAuthCode(“授权码”)
  • $token
    内部,我收到了以下信息:
    访问令牌、令牌类型、过期、刷新令牌、id令牌、已创建的
  • 现在在
    $payload=$client->verifyIdToken(id\u令牌)中使用
    id\u令牌
  • 然后,您将在
    $payload
    中获得所需的正确信息,如姓名、aud、exp、iss等
  • 注意:为了避免代码再次返回“令牌中的段数错误”错误,您必须尝试捕获
    verifyIdToken
    方法

    try {
         $payload = $client->verifyIdToken(id_token);
    }
    catch (Exception $e) {
         echo "Invalid id token";
    }
    

    可能与此有关否否,jbduzan在指令if($public_key->verify($signed,$signature))处有阻塞,更多的是在指令处:if(count($segments)!=3)