令牌中的段数错误(带php的OAuth Google Api)
我有一个php应用程序,它使用OAuth2对用户帐户进行身份验证 直到昨天,一切都很顺利 但是今天,在不改变代码的情况下,当我尝试访问我的帐户,并且在我验证了我的google帐户后,我获得了一个空白页面 我调试了代码,发现当Google_客户端尝试验证IDToken,更确切地说是在函数verifySignedJwtWithCerts中时,代码崩溃了,因为:令牌中的段数错误(带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
$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)