Google API客户端:令牌已被撤消

杰克·拉森

我在Rails项目中使用了google-api-client gem。我拥有omniauth并可以正常工作,并且我的用户可以通过Google进行身份验证。

我以为直到最近,我的进展都很顺利。我注意到我的应用程序在一小时后获取Google Calendar API时将抛出错误。到期时间是从认证时间开始的一小时,然后我收到此错误:

Signet::AuthorizationError (Authorization failed.  Server message:
{
   "error" : "invalid_grant",
   "error_description" : "Token has been revoked."
}):

这与无效的刷新令牌是分开的,因为我确实将刷新令牌存储在数据库中。它正在使用以下代码发送刷新令牌请求,从而避免了上述错误:

client = Google::APIClient.new(
  :application_name => APP_NAME,
  :application_version => APP_VERSION,
)

client.authorization.client_id = CLIENT_ID
client.authorization.client_secret = CLIENT_SECRET

client.authorization.refresh_token = user.auth_refresh_token
token_result = client.authorization.fetch_access_token!

我一直非常小心,不要登录和注销我的Google帐户,因此我不知道Google为什么会发回此消息。如果我在55分钟后刷新页面,一切正常。如果我在1小时后刷新页面,它会抱怨访问令牌被吊销。

以前有人遇到过这个问题吗?如果是这样,您做了什么修复?您是否必须在Google开发人员控制台中进行更改?

杰克·拉森

我最终弄清楚了这个问题,所以我想分享一下解决问题的方法。

在config / initializers / devise.rb中,我有:

scope: 'userinfo.profile, userinfo.email, calendar, https://www.googleapis.com/auth/gmail.readonly', prompt: 'select_account consent' }

这对我来说是prompt: 'select_account consent'重要的。在每次登录时要求用户同意,似乎可以使刷新令牌保持最新状态。当用户通过Google登录时,我检查响应中是否有刷新令牌,以及是否将刷新令牌保存到数据库中。如果没有,我将其当前的刷新令牌保留在数据库中。

老实说,我真的不明白为什么需要这样做,但是对于共享了代码示例的其他用户来说,这很好。也许Google的OAuth2发生了变化,或者我处理授权的方法存在差异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么定义了Google API刷新令牌的客户端/用户对?

来自分类Dev

PHP Google API客户端缓存访问令牌

来自分类Dev

使用Google API JS客户端时如何获取刷新令牌

来自分类Dev

Laravel Google API客户端获取刷新令牌并上传文件

来自分类Dev

使用Google API JS客户端时如何获取刷新令牌

来自分类Dev

Google API客户端的多个实例?

来自分类Dev

Google API客户端和Cronjob

来自分类Dev

Google API PHP客户端授权

来自分类Dev

使用访问令牌获取Google客户端

来自分类Dev

未经授权_客户端,同时刷新Google访问令牌

来自分类Dev

使用现有访问令牌通过Google的gapi库进行的授权客户端JS API调用?

来自分类Dev

Google API客户端“必须传递刷新令牌或将其设置为setAccessToken的一部分”

来自分类Dev

我可以使用客户端访问/刷新令牌来访问服务器上的Google API

来自分类Dev

Google API客户端GTMHTTPUploadFetcher已重复

来自分类Dev

Google Cloud Datastore API的Objective-C客户端?

来自分类Dev

Google API PHP客户端-联系人服务

来自分类Dev

Google API客户端连接后开始活动

来自分类Dev

在Windows上使用C ++的Google API客户端库

来自分类Dev

Google OAuth Java客户端和Twitter API

来自分类Dev

检索客户端的Google API授予的范围

来自分类Dev

将Google API客户端添加到Codeigniter

来自分类Dev

Google Api客户端PHP-mkdir():权限被拒绝

来自分类Dev

如何获得API客户端?(Google Play服务)

来自分类Dev

Google API客户端OAuth始终返回已取消

来自分类Dev

Google API客户端ID未授权

来自分类Dev

Google API客户端错误,发送位置

来自分类Dev

Google API PHP客户端和合作伙伴

来自分类Dev

Google API错误400:“找不到客户端项目”

来自分类Dev

Android Google API客户端未连接

Related 相关文章

  1. 1

    什么定义了Google API刷新令牌的客户端/用户对?

  2. 2

    PHP Google API客户端缓存访问令牌

  3. 3

    使用Google API JS客户端时如何获取刷新令牌

  4. 4

    Laravel Google API客户端获取刷新令牌并上传文件

  5. 5

    使用Google API JS客户端时如何获取刷新令牌

  6. 6

    Google API客户端的多个实例?

  7. 7

    Google API客户端和Cronjob

  8. 8

    Google API PHP客户端授权

  9. 9

    使用访问令牌获取Google客户端

  10. 10

    未经授权_客户端,同时刷新Google访问令牌

  11. 11

    使用现有访问令牌通过Google的gapi库进行的授权客户端JS API调用?

  12. 12

    Google API客户端“必须传递刷新令牌或将其设置为setAccessToken的一部分”

  13. 13

    我可以使用客户端访问/刷新令牌来访问服务器上的Google API

  14. 14

    Google API客户端GTMHTTPUploadFetcher已重复

  15. 15

    Google Cloud Datastore API的Objective-C客户端?

  16. 16

    Google API PHP客户端-联系人服务

  17. 17

    Google API客户端连接后开始活动

  18. 18

    在Windows上使用C ++的Google API客户端库

  19. 19

    Google OAuth Java客户端和Twitter API

  20. 20

    检索客户端的Google API授予的范围

  21. 21

    将Google API客户端添加到Codeigniter

  22. 22

    Google Api客户端PHP-mkdir():权限被拒绝

  23. 23

    如何获得API客户端?(Google Play服务)

  24. 24

    Google API客户端OAuth始终返回已取消

  25. 25

    Google API客户端ID未授权

  26. 26

    Google API客户端错误,发送位置

  27. 27

    Google API PHP客户端和合作伙伴

  28. 28

    Google API错误400:“找不到客户端项目”

  29. 29

    Android Google API客户端未连接

热门标签

归档