使用www.googleapis.com和googleapiphp客户端验证id令牌


Verifying id token using www.googleapis.com and google-api-php-client

所以我使用从我的android应用程序中检索到了令牌ID

GoogleSignInAccount acct = result.getSignInAccount();
String idToken = acct.getIdToken();

如果我尝试使用验证令牌https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=idToken

那么它将是成功的;我的意思是googleapis.com会返回类似的内容:

{
iss: "https://accounts.google.com",
aud: "12312331-hjs13hbf0j1ge08s7lvepiupiljuokce.apps.googleusercontent.com",
sub: "23432432",
email_verified: "true",
azp: "12312331-nvi4gh28jekfm3e48ofqeh1c5rof2rsa.apps.googleusercontent.com",
email: "miowww@gmail.com",
iat: "123213123",
exp: "123213123",
name: "Me Miow",
picture: "https://lh5.googleusercontent.com/-XXXX/AAAAAAAAAAI/XXXX/XXXX/s96-c/photo.jpg",
given_name: "Me",
family_name: "Miow",
locale: "en",
alg: "RS256",
kid: "849996986ecf01a6c8xxxxxxx"
}

但是如果使用图书馆https://github.com/google/google-api-php-client并运行idtoken.php?code=idToken库来自google''apiclient''examples它将返回

Fatal error: Uncaught InvalidArgumentException: Invalid token format in /home/meowww/public_html/meniti/vendor/google/apiclient/src/Google/Client.php:423 Stack trace: #0 /home/meowww/public_html/meniti/idtoken.php(65): Google_Client->setAccessToken(Array) #1 {main} thrown in /home/meowww/public_html/meniti/vendor/google/apiclient/src/Google/Client.php on line 423

为什么google api php客户端会显示错误?

$_GET['code']是Google在用户身份验证后返回的唯一值。它不同于id_token,这就是为什么你得到InvalidArgumentException。您看到的示例实际上是一个auth示例,它涵盖了获取id令牌所需的所有步骤。如果您已经拥有该令牌,并且还想在后端对其进行验证,则可以跳过所有这些步骤,直接进行验证。即:

$token_data = $client->verifyIdToken($id_token)->getAttributes();

我认为您需要启用脱机访问才能完成此操作。