facebook - 存储访问 token 并处理它们的过期

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

我将 OAuth 用作:

  1. 将用户登录到我的网络应用程序的辅助方法(而不是手动提供他们的姓名、电子邮件和密码)
  2. 一种在整个网站上接收用户数据的方式。

在存储访问 token 时,什么是最佳实践?我有两个选择:

  1. 在 cookie 中存储访问 token
  2. 在数据库中存储访问 token

这两种选择的优缺点是什么?


关于 token 过期,应该如何处理?

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

我不明白其他网站如何在不要求我重新登录的情况下保持对 Facebook、Google 或 Twitter API 的访问,尤其是当我在另一台我从未登录过 Facebook 的设备上时,推特或谷歌。他们如何做到这一点?谢谢。

最佳答案

如果使用 Google OAuth2.0 完成身份验证. Google 提供两种 token ,即访问 token 和刷新 token 。

访问 token 的生命周期有限为 3600 秒,但刷新 token 的有效期更长。

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

无需重新登录即可从刷新 token 中获取新的访问 token 。 ReST api

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

如果您没有存储可从中重新生成访问 token 的刷新 token ,则必须再次进行身份验证以获取新 token 。

关于facebook - 存储访问 token 并处理它们的过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38837509/

相关文章:

ios - iOS5 上的 Facebook SDK 导致崩溃

java - 搜索 Facebook api 不适用于电子邮件

java - 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP

github - GitHub/.well-known/openid-configuration URL 是什么?

facebook - FQL 查询和 Graph API 对象访问之间的区别

javascript - 如何在javascript中动态构建json数组

Android - 共享

android - 使用图形 API 在 Facebook 墙上发帖不起作用

没有所有者的 Facebook 应用程序

api - postgres 中的 OAuth 2.0 授权性能