Google登录后,如何在用户登录后获取google userID服务器端?

时间:2014-03-07 23:00:35

标签: php api server-side google-oauth

你好第一个问题在堆栈上!

我习惯了Facebook Connect,我正在实施Google登录我的网站。 用户可以使用他们的FB或Google+帐户(客户端javascript API)进行连接,我在我的数据库中创建用户个人资料并存储他们的fb UId或G + UID。没问题!

现在当他们回来时...使用facebook API,我可以轻松使用他们的php API来获取当前用户ID $ facebook-> getUser(),这样我就可以从数据库中检索用户个人资料

使用Google+,我可以轻松地使用他们的javascript API(gapi.auth.authorize)获取G + UID客户端,但如何在服务器端执行相同操作而不要求离线访问权限?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

至少有两种方法可以实现这一目标。

如果您有授权代码(您不需要离线访问以请求'代码'响应类型),您可以调用令牌端点并在反向通道中获取id_token。 Base64解码令牌将为您提供user_id。此方法不要求您验证id_token中的签名,因为您正在直接向安全(受TLS / HTTPS保护)的Google处理程序进行服务器端调用。

否则,您可以请求'id_token'响应,然后执行完整的id_token验证。这需要检查Google签名并确保将id_token发布到您的应用程序(将您的client_id与id_token的'aud'参数匹配)。

此策略在https://developers.google.com/accounts/docs/OAuth2Login#exchangecode(第一种方法)中有更详细的解释 https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken(第二种方法)。

第一种方法更容易实现,第二种方法更有效(不需要网络往返)。