好的,这个问题以前已经问过了。在对该问题的回答中,用户告诉他将refresh_token
存储在应用程序中(会话而不是数据库,尽管存储在何处并不重要)。在浏览了谷歌上的文档后,access_token
似乎有一个过期日期,超过该日期后它将不再有效。现在,我们显然可以每隔固定的时间间隔自动刷新令牌,或者如果服务返回无效的令牌错误,从而延长令牌的使用寿命,但出于某种原因,这个手动过程感觉有点麻烦。我的问题是:
- 这是通过手动登录并在应用程序中持久化令牌来访问已知用户帐户的谷歌日历/应用程序数据的最有效(/普遍接受)方式吗?或者,是否有其他机制允许我们以编程方式登录到此用户帐户并完成OAuth步骤
在我的应用程序中,流程如下:
- 如果未定义
access_token
,请将用户重定向到Google页面,在该页面上,用户可以访问访问其Google数据的应用程序。这将向您的应用程序返回授权码 - 使用授权码获取
access_token
和refresh_token
。您还应该保存返回的expires_in
值,该值将在access_token
到期且无法再使用时告诉您 - 每当您需要访问API时,如果
access_token
已过期,您可以在DB中进行检查-如果已过期,请在访问API之前使用refresh_token
获取新的access_token
我在这样做时没有遇到任何问题——就用户而言,他们只需要授予访问权限一次,然后应用程序就可以从那时起负责身份验证。
这应该可以解决你的问题,因为应用程序会根据最初授予你应用程序访问权限的用户以编程方式重新验证自己,你不需要手动做任何事情。事实上,我不确定是否有其他方法可以做到这一点,因为要再次执行OAuth过程,用户必须坐在设备前面才能手动授予访问权限。这就是在数据库中持久化access_token
和refresh_token
的要点。