2012-03-21 94 views
16

好了,here之前这个问题已经被问。在回答/回答问题时,用户告诉他将refresh_token存储在应用程序中(session和not db,尽管存储它的位置并不重要)。在阅读Google上的文档之后,似乎access_token的失效日期已过,不再有效。现在,我们显然可以每隔固定的时间间隔自动刷新令牌,或者如果服务返回无效的令牌错误,从而延长令牌的使用寿命,但由于某种原因,这个手动过程感觉有点不方便。我的问题是:如何自动登录到谷歌API来获取的OAuth 2.0令牌来访问已知的用户帐户

  • 这是最有效的(/普遍接受的)方式通过手动登录和应用程序持续令牌访问谷歌日历/应用数据的一个已知用户帐户?还是有另一种机制,允许我们以编程方式登录到这个用户帐户,并通过OAuth步骤?

回答

25

在我的应用程序,流程是这样的:

  1. 如果没有定义access_token,将用户重定向到谷歌网页,他们授予您的应用程序访问他们的谷歌的数据访问。这会将授权码返回给您的应用程序。
  2. 使用授权码来获得一个access_tokenrefresh_token。您还应该保存返回的expires_in值,该值告诉您access_token何时到期并且不能再使用。
  3. 无论何时您需要访问API,您都可以检查数据库access_token是否已过期 - 如果是,请在访问该API之前使用refresh_token获取新的access_token

我还没有遇到过这样做的任何问题 - 就用户而言,他们只需授予访问权限一次,然后应用程序就会从那里接受身份验证。

这应该解决您的问题,因为应用程序不断重新认证本身基于用户最初授权访问你的应用程序,你不需要手工做任何事情。实际上,我不确定还有其他方法可以做到这一点,因为要再次执行OAuth过程,用户必须坐在设备前面手动授予访问权限。这就是在数据库中坚持access_tokenrefresh_token的要点。

+0

@mattewh你能帮我吗?http://stackoverflow.com/questions/24894789/google-oauth-and-owin-how-to-renew-the-access-token-using-the-refresh-token – 2014-07-22 18:19:40

+3

如果您必须进行不自动的用户交互。 – 2016-06-21 20:15:40

+0

@KeithTyler OAuth取决于用户的同意至少一次,之后不需要进一步的交互。 – 2016-07-25 07:50:45

相关问题