php 谷歌总是返回虚假的身份验证令牌

13z8s7eq  于 2023-01-19  发布在  PHP
关注(0)|答案(4)|浏览(127)

我有下一个代码,直接从谷歌参考(https://developers.google.com/identity/sign-in/web/backend-auth

public function verifyFromAndroid($idToken=null) {
        if(empty($idToken)) {
            $idToken = self::SAMPLE_ID_TOKEN;
        }
        $client = new Google_Client(['client_id' => self::CLIENT_ID]);
        $payload = $client->verifyIdToken($idToken);
        if ($payload) {
            print_r($payload);
            $userid = $payload['sub'];
            // If request specified a G Suite domain:
            //$domain = $payload['hd'];
        } else {
            var_dump($payload);
            $this->lastError = "Invalid ID token";
            return false;
        }
    }

但是这个方法总是返回false,即使使用了oauthplayground online tool创建和工作的有效id标记。
下一个代码工作正常,直接使用GoogleAccessToken_Verify类.有人能告诉我为什么官方的谷歌代码不工作,是的,我自己的代码使用官方的Google-clien-php sdk?

try {
            $verify = new Google_AccessToken_Verify();
            $result = $verify->verifyIdToken($this->idToken);
            if($result) {

                print_r($result);
                $friendlyData = $this->translateData($result, true);
                if(!$friendlyData) {
                    return false;
                }
                return $friendlyData;
            }
            else {
                $this->lastError = "Invalid token verification, no error code";
                return false;
            }
        }
        catch(UnexpectedValueException $ex) {
            $this->lastError = "UnVaEx (Code {$ex->getCode()}): {$ex->getMessage()}";
            return false;
        }
omqzjyyz

omqzjyyz1#

尝试添加完整的客户端ID
xxxxxxxxxxxxxx-xxxxx-yy-zz.apps.googleusercontent.com
同时启动
$客户端=新的谷歌客户端(['客户端ID' =〉自身::客户端ID]);
它应该工作,我也面临着同样的问题...

3b6akqbq

3b6akqbq2#

有一个类似的问题。删除了我在firebase console上的android应用程序,并创建了一个新的应用程序,使用调试密钥sha1.Then下载并替换了我的google.json到我的应用程序中。这修复了我的问题。这种情况已经发生在我身上两次了。有时你只需要在firebase console上重新创建android应用程序。

iq3niunx

iq3niunx3#

在你开始在https://developers.google.com/identity/sign-in/web/sign-in上注册你的后端URL之前,请点击Configure your project按钮,不要在代码中使用任何credential或api key。

public function verifyFromAndroid($idToken=null) {
    if(empty($idToken)) {
        $idToken = self::SAMPLE_ID_TOKEN;
    }
    //As you notice we don't use any key as a parameters in Google_Client() API function
    $client = new Google_Client();
    $payload = $client->verifyIdToken($idToken);
    if ($payload) {
        print_r($payload);
        $userid = $payload['sub'];
        // If request specified a G Suite domain:
        //$domain = $payload['hd'];
    } else {
        var_dump($payload);
        $this->lastError = "Invalid ID token";
        return false;
    }
}

希望能有所帮助。

2vuwiymt

2vuwiymt4#

我遇到了同样的问题。在检查了不同的PHP版本后,我发现谷歌客户端库在PHP7. 4中工作,而在PHP8. 0中不工作。
请在将PHP版本降级到7.4后尝试以下代码

require_once 'vendor/autoload.php';

$id_token = $_POST['credential'];

$client = new Google_Client(['client_id' => $CLIENT_ID]);  // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
  $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

或者对于开发和调试,您可以调用google oauth2tokeninfovalidation endpoint。
https://oauth2.googleapis.com/tokeninfo?id_token=$id_token

相关问题