Google身份验证一步一步

时间:2015-07-09 11:04:38

标签: php oauth google-oauth

我无法在任何地方找到如何在Google OAuth中从头到尾查看身份验证,我应该在数据库中存储什么以及如何存储。

我正在处理应用程序,该程序允许用户使用Google帐户登录并授予其Gmail帐户权限,而且我不太确定一切应该如何逐步运行。我有两个想法:

#1

  1. 用户点击" Google登录"按钮
  2. 应用程序要求https://www.googleapis.com/auth/userinfo.email和其他服务(gmail等)
  3. 的许可
  4. 作为回应,我得到access_tokenrefresh_tokenid_token
  5. 我将refresh_tokenid_token存储在数据库
  6. 我生成PHPSESSID并将其存储在数据库中
  7. 每次用户访问我的网站时,我都会在数据库中检查PHPSESSID并验证id_token
  8. 这里我有问题......
  9. 如果用户尝试从其他浏览器或其他PC登录怎么办?每次用户登录我的应用程序时,我都需要更新refresh_tokenid_token。这是一个很好的解决方案吗?

    #2

    1. 用户点击" Google登录"按钮
    2. 应用程序仅要求https://www.googleapis.com
    3. 的许可
    4. 作为回应,我得到id_token
    5. 我将id_token存储在数据库
    6. 我生成PHPSESSID并将其存储在数据库中
    7. 每次用户访问我的网站时,我都会在数据库中检查PHPSESSID并验证id_token
    8. 用户登录后,我会向他询问其他Google服务(gmail等)的权限。
    9. 作为回应,我得到refresh_token并将其存储在数据库
    10. 首先。可以两次询问同一域的权限吗?在此解决方案中,每次用户登录应用程序时,我都只需要更新id_token

      或许有更好的方法进行此类身份验证?

1 个答案:

答案 0 :(得分:1)

您要做的是在用户第一次签名时将Type2与用户的唯一标识符(例如,您可以从Type1中读取的Google用户ID)一起存储英寸

然后,只要您需要代表用户调用API,就可以在服务器端使用此refresh_token获取id_token

当用户再次访问您的网站并登录时(无论他们使用的是哪种浏览器或设备),您只需将refresh_token发送到您的服务器,提取用户ID并检查您的数据存储区access_token已经存在并相应地使用它。

我刚刚在这里写了一篇关于服务器端身份验证的可能场景的文章:http://codingwithgerwin.blogspot.co.at/2015/04/google-sign-in-20-server-side.html(它在服务器端使用Python,但它几乎就是同样适用于PHP)。