你好第一个问题在堆栈上!
我习惯了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客户端,但如何在服务器端执行相同操作而不要求离线访问权限?
感谢您的帮助!
答案 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(第二种方法)。
第一种方法更容易实现,第二种方法更有效(不需要网络往返)。