使用 www.googleapis.com 和 google-api-php-client 验证 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 会 return 像这样:
{
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 库将 return
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
的原因。您正在查看的示例实际上是一个身份验证示例,它涵盖了获取 id 令牌所需的所有步骤。如果您已经拥有该令牌并且还想在后端验证它,则可以跳过所有这些步骤并直接进行验证。即:
$token_data = $client->verifyIdToken($id_token)->getAttributes();
我认为您需要启用离线访问才能拉取它。
所以我使用
从我的 android 应用程序中检索了令牌 IDGoogleSignInAccount acct = result.getSignInAccount();
String idToken = acct.getIdToken();
如果我尝试使用 https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=idToken
验证令牌那就成功了;我的意思是 googleapis.com 会 return 像这样:
{
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 库将 return
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
的原因。您正在查看的示例实际上是一个身份验证示例,它涵盖了获取 id 令牌所需的所有步骤。如果您已经拥有该令牌并且还想在后端验证它,则可以跳过所有这些步骤并直接进行验证。即:
$token_data = $client->verifyIdToken($id_token)->getAttributes();
我认为您需要启用离线访问才能拉取它。