Google 认证步骤

Google authentication step by step

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

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

#1

  1. 用户点击 "Google sign in" 按钮
  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. 这里我遇到了问题...

如果用户尝试从其他浏览器或其他 PC 登录怎么办?每次用户登录我的应用程序时,我都需要更新 refresh_tokenid_token。这是一个好的解决方案吗?

#2

  1. 用户点击 "Google sign in" 按钮
  2. 应用程序仅请求 https://www.googleapis.com
  3. 的许可
  4. 作为回应,我得到 id_token
  5. 我在数据库中存储了id_token
  6. 我生成 PHPSESSID 并将其存储在数据库中
  7. 每次用户访问我的网站时,我都会在数据库中检查 PHPSESSID 并验证 id_token
  8. 用户登录后,我向他询问其他 Google 服务(gmail 等)的权限
  9. 作为响应,我得到 refresh_token 并将其存储在数据库中

首先。是否可以两次请求同一域的权限?在此解决方案中,每次用户登录到应用程序时,我只需要更新 id_token

或者也许有更好的方法来进行这种身份验证?

您想要做的是将 refresh_token 与用户的唯一标识符一起存储(例如,您可以从 id_token 中读取的 Google 用户 ID)用户第一次登录。

然后,您可以在服务器端使用此 refresh_token 来获取 access_token,只要您需要一个代表用户调用 API。

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

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

相同