谷歌的不同代币类型之间有什么关系?以及如何将字符串令牌与他们的 PHP 库一起使用


What's the relationship between google's different token types? And how can I use the string token with their PHP lib?

谷歌似乎有两种类型的令牌,我在从旧的Google+登录迁移到谷歌登录时遇到问题,如下所述:https://developers.google.com/identity/sign-in/web/quick-migration-guide

我正在使用谷歌php客户端连接到谷歌API:https://github.com/google/google-api-php-client

    $client = new Google_Client();
    $client->setClientId($appId);
    $client->setClientSecret($secret);
    $client->setAccessToken($token);

以上是我在旧的Google+登录上工作的代码。 $token是json编码格式

[
    created: original_token.issued_at,
    access_token: original_token.access_token,
    expires_in: original_token.expires_in
]

访问令牌的格式包含两个段,如下所示:

xxx.xxxxxxxxxxxxxxxxxxxxxxxxxx

当我使用迁移中的新格式时,我调用了googleUser.getAuthResponse().id_token它为我提供了一种具有 3 个段且更长的 JWT 令牌格式。

我正在使用这种方法,它似乎是较新的方法并返回一个字符串标记:

当我将该id_token放入与access_token相同的 json 对象时,我收到一个错误,指出令牌格式错误。如果我尝试 base64 解码原始access_token它看起来像二进制。所以我不确定如何将这个新id_token转换为我可以与此 API 一起使用的格式。

我怎样才能转换这个?

从你的问题来看,不清楚你想做什么。

JWT,看起来像这样:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.ixOUGehweEVX_UKXv5BbbwVEdcz6AYS-6uQV6fGorGKrHf3LIJnyREw9evE-gs2bmMaQI5_UbabvI4k-mQE4kBqtmSpTzxYBL1TCd7Kv5nTZoUC1CmwmWCFqT9RE6D7XSgPUh_jF1qskLa2w0rxMSjwruNKbysgRNctZPln7cqQ

是身份验证请求的一部分。

如果请求获得批准,您将收到如下响应:

{
  "access_token" : "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M",
  "token_type" : "Bearer",
  "expires_in" : 3600
}

哪个包含您要在请求中实际使用的令牌。