我正在努力将Google Apps集成到我的PHP应用程序中。我已经有一个登录系统,它为用户分配一个会话ID(输入用户名和密码后),当用户登录时,该会话ID存储在数据库中。在一段时间不活动后会话ID变为无效(用户可配置,可以是5分钟,15,60 ...)。该会话ID在URL中传递以检查用户是否仍然登录。注销时,会话ID将从数据库中删除。Google Apps和OAuth最佳做法
我让人们通过将他们的Google ID存储在数据库中,当他们登录时登录Google,我请求访问令牌,查询userinfo,查看谷歌ID是否在数据库中,如果是,分配一个会话ID给这个用户。由于我希望能够查询其他API,我还将访问令牌json存储在数据库中。当用户注销时,访问令牌也会从数据库中删除。
这工作,我的用户可以登录使用他们的谷歌帐户,我可以在API的使用存储的access_token查询,但有些事情让人感到笨拙让我觉得不确定我的工作流程:
如果你force_approval你得到一个refresh_token,我觉得我应该使用这个刷新令牌来获得一个新的访问令牌,而不是从数据库中删除旧的令牌,并在用户再次登录时输入一个新令牌。另一方面,登录时,我不知道它是谁,所以我不知道使用哪个刷新令牌。也许我误解了刷新令牌的用途。另外,我并不想每次都强制批准,所以在这种情况下我甚至不能使用refresh_token。
如前所述,用户可以确定他们的会话将持续多长时间,但是,google access_token总是在3600秒后过期。如果用户在系统上工作一个小时,然后谷歌API突然失效,迫使他们再次登录,那将是非常愚蠢的。 Google OAuth操场会显示一个复选框“过期前自动刷新令牌”,但我没有看到如何操作。我必须在这里使用刷新标记吗?或者只是在后台申请一个新的令牌(如果我不强制批准)?目前,我正在使用userinfo查询(https://www.googleapis.com/oauth2/v2/userinfo)来查找用户ID,但我也可以使用tokeninfo(https:///www.googleapis.com/oauth2/v1/tokeninfo)。令牌信息未列在oauth游乐场中,但结果确实显示了令牌的有效期(但我也可以自己计算)。一个比另一个更好吗?我存储整个json对象在数据库(access_token,id_token,expires_in和token_type),但我觉得我的应用程序仍然会工作完美,如果我只存储access_token(只有问题,我预见如果expires_in时间变化)。例如,我需要存储id_token吗?
我发现谷歌文档(在developers.google.com)有时也很缺乏的,如果任何人知道的任何其他信息的良好来源,我感兴趣的是他们。
非常感谢您的意见,我会阅读您提供的文章,并希望他们能够一路帮助我。 – Bram 2012-03-12 12:06:40