使用www.googleapis.com和google-api-php-client验证ID令牌

时间:2016-07-24 05:59:20

标签: php android 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并从google \ apiclient \ examples运行idtoken.php?code = idToken库,它将返回

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-client会显示错误?

1 个答案:

答案 0 :(得分:2)

$_GET['code']是Google在用户通过身份验证后返回的唯一值。它与id_token不同,这就是您获得InvalidArgumentException的原因。您正在查看的示例实际上是一个身份验证示例,其中包含获取ID令牌所需的所有步骤。如果您已经拥有该令牌,并且您想在后端进行验证,则可以跳过所有这些步骤并直接进行验证。那就是:

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

我认为您需要启用离线访问才能启用此功能。