存储访问令牌并处理他们的到期

时间:2016-08-08 19:56:46

标签: facebook facebook-graph-api oauth google-api google-oauth

我正在使用OAuth:

  1. 将用户签入我的网络应用程序的辅助方法(而不是手动提供他们的姓名,电子邮件和密码)
  2. 在整个网站上接收用户数据的方式。
  3. 存储访问令牌时最佳做法是什么?我有两个选择:

    1. 在Cookie中存储访问令牌
    2. 在数据库中存储访问令牌
    3. 任何一种选择有哪些优点和缺点?

      关于令牌到期,应该采取什么措施来解决这个问题?

      我知道我可以处理这个问题的一种方法是检查调用API时是否有错误,然后请求新令牌,然后再次调用API。但是,在申请新令牌时,我是否会要求用户重新登录?我想这会是一个问题,当我的网站上的一个页面需要来自Facebook的数据,但要检索它,用户必须重新登录。

      我不明白其他网站是如何设法维持对Facebook,Google或Twitter API的访问而不需要我再次登录的,尤其是当我在另一台我没有登录过Facebook的设备上时, Twitter或谷歌。他们如何做到这一点?感谢。

1 个答案:

答案 0 :(得分:4)

如果使用Google OAuth2.0进行身份验证。谷歌提供两个令牌,即访问令牌和刷新令牌。

访问令牌的有效期为3600秒,但刷新令牌在较长时间内有效。

刷新令牌也会过期。阅读 Google OAuth2.0 链接的“令牌过期”部分

可以从刷新令牌获取新的访问令牌而无需重新登录。 ReST api

因此,可以实现逻辑以检查生成访问令牌后经过的时间,并采取预防性步骤来生成新的访问令牌。 Google令牌将在3600秒后到期,因此可以在每3500秒后获取访问令牌,并更新存储在新版本中的旧访问令牌以供进一步使用。另一种方法是,在GoogleCredential中设置刷新令牌,在创建任何api的服务时作为参数(httpRequestInitializer)传递。(例如查找Drive.Builder

如果您不存储可以重新生成访问令牌的刷新令牌,则必须再次进行身份验证以获取新令牌。