【发布时间】:2014-05-31 01:08:05
【问题描述】:
我正在尝试使用 google Oauth2 api 的 php 客户端来验证 id_token。 id_token 由用户登录其 google 帐户的 javascript 应用程序提供,我将此令牌提供给我的 php api 服务器,以便对其进行验证并从我的 bdd 检索正确的信息。
javascript 登录成功,访问和 id_token 似乎正确,但是当我尝试使用 Google_Client->verifyIdToken() 进行验证时
$client = new Google_Client();
$ticket = $client->verifyIdToken(myToken);
,它返回一个无效的令牌签名异常(尝试使用谷歌证书验证令牌时失败)。
我的第一个假设是认为令牌无效,所以为了确保它是有效的,我将它提交到谷歌验证 url 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()(从 access_token 自己提取 id_token),结果相同。
我用的代码都已经贴出来了,我也试过设置apikey、client_id、client_secret,没有结果
【问题讨论】:
-
你到底传递给
verifyIdToken的是什么?你能发布一些代码吗? -
@ViniciusPinto 我编辑了我的帖子
-
我刚刚做了一个小测试,效果很好,不知道你的代码可能出了什么问题。我会仔细检查
id_tokenPHP 接收到的是否与 JS 库返回的完全相同。 -
我已经这样做了,完全一样