我使用OAuth作为:
- 将用户登录到我的web应用程序的第二种方法(而不是手动提供他们的姓名,电子邮件和密码)
- 在整个网站接收用户数据的一种方式。
存储访问令牌的最佳实践是什么?我有两个选项:
- 在cookie中存储访问令牌
- 在数据库中存储访问令牌
这两种选择的优缺点是什么?
关于令牌过期,应该如何处理?
我知道我可以处理这个问题的一种方法是检查调用API时是否有错误,因此请求一个新的令牌,然后再次调用API。但是,当请求新的令牌时,我是否需要用户再次登录?我可以想象,当我的网站上的一个页面需要从Facebook获取数据时,这将是一个问题,但要检索它,用户必须重新登录。
我不明白其他网站如何在不要求我再次登录的情况下保持对Facebook,谷歌或Twitter api的访问,特别是当我在另一个设备上,我没有登录过Facebook, Twitter或谷歌。他们是怎么做到的?谢谢。
如果使用Google OAuth2.0完成身份验证。谷歌提供了两个令牌,即访问令牌和刷新令牌。
访问令牌的有效期为3600秒,但刷新令牌的有效期更长。
刷新令牌也过期。阅读Google OAuth2.0链接
的"令牌过期"部分无需重新登录即可从刷新令牌获取新的访问令牌。ReST api
因此,可以实现逻辑来检查生成访问令牌后经过的时间,并对生成新的访问令牌采取预防措施。Google令牌在3600秒内到期,因此可以在每3500秒后获得访问令牌,并使用新令牌更新存储的旧访问令牌以供进一步使用。另外一种方法是,在创建任何api的服务时,在GoogleCredential中设置刷新令牌,该令牌作为参数(httpRequestInitializer)传递。(例如查找Drive.Builder)
如果您没有存储可以从中重新生成访问令牌的刷新令牌,则必须再次进行身份验证以获得新令牌。