2016-07-24 110 views
0

所以,我从我的使用验证ID令牌使用www.googleapis.com和谷歌API的PHP客户端

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

Android应用获取的令牌标识。如果我试图验证使用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: "[email protected]", 
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码= idToken库从谷歌\ apiclient \例子,它将返回

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

回答

2

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

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

我相信你需要启用脱机访问来拉这个。

+0

感谢您的解释! – imin

+0

很高兴帮助! – trajchevska

相关问题