google-api-php-client – Google Oauth2 verifyIdToken返回带有效id_token的无效令牌签名

我正在尝试使用google Oauth2 api的php客户端来验证id_token.

id_token是由一个
javascript应用程序提供的,用户登录他的谷歌帐户,我将这个令牌提供给我的php api服务器,以便验证它并从我的bdd中检索正确的信息.

javascript中的登录是成功的,访问和id_token似乎是正确的,但当我尝试使用Google_Client-> verifyIdToken()验证它时

$client = new Google_Client();
$ticket = $client->verifyIdToken(myToken);

,它返回无效的令牌签名异常(尝试使用google证书来验证令牌时失败).

我的第一个假设是认为令牌无效,所以为了使其成为现实,我将其提交给谷歌验证网址https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=token

它返回用户信息,所以我的令牌似乎是有效的:

{
issuer: "accounts.google.com",
issued_to: "id",
audience: "id",
user_id: "id",
expires_in: 2149,
issued_at: 1397636222,
email: "mail",
verified_email: true
}

尝试了我能想到的一切,但无法解决这一问题.
有人能帮我吗 ?

编辑:我只传递了我在我的javascript应用程序上进行身份验证时获得的id_token

access_token: "ya ... Es"
authuser: "1"
client_id: "81 ... .apps.googleusercontent.com"
code: "4/9... gI"
cookie_policy: "single_host_origin"
expires_at: "1397723048"
expires_in: "3600"
g-oauth-window: Window
g_user_cookie_policy: "single_host_origin"
hd: "dmic.fr"
id_token: "ey... d8E" <====================================
issued_at: "1397719448"
num_sessions: "2"
prompt: "none"
response_type: "code token id_token gsession"
scope: "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.me"
session_state: "9 ... 2162..936b"
state: ""
status: Object
token_type: "Bearer"

在某些时候,我也尝试将整个access_token传递给$client-> setAccessToken()并调用$client-> verifyIdToken(),没有参数(从acess_token本身提取id_token),结果相同.

我使用的所有代码都已发布,我也尝试设置apikey,client_id,client_secret,没有结果

最佳答案 我遇到了类似的问题,我从oauth2client获得了“无效的令牌签名”错误,但它与tokeninfo API调用一起使用.

在我的情况下,它可能是由oauth2client使用的加密lib引起的,因为当我用pyopenssl 0.15.1替换pycrypto 2.6时问题消失了.可能是PyCrypto错误?

编辑:
是的,经过验证,这是一个PyCrypto错误.它已于20小时前关闭:D

https://github.com/google/oauth2client/issues/201

点赞