我将 OAuth 用作:
- 将用户登录到我的网络应用程序的辅助方法(而不是手动提供他们的姓名、电子邮件和密码)
- 一种在整个网站上接收用户数据的方式。
在存储访问 token 时,什么是最佳实践?我有两个选择:
- 在 cookie 中存储访问 token
- 在数据库中存储访问 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/