oauth2.0 Google API -“活动会话无效,错误代码:4”

0aydgbwb  于 2023-10-15  发布在  Go
关注(0)|答案(1)|浏览(89)

我试图通过Oauth2访问Google Drive API,但遇到了一个错误,在搜索时没有产生任何结果。

这是我的代码

require "oauth2"
require "google/apis/gmail_v1"
require "google/apis/drive_v3"
require "googleauth"

token = { 
    access_token: ...,
    refresh_token: ...,
}

def get_gmail_service(token)
  service = Google::Apis::GmailV1::GmailService.new
  service.authorization = oauth_authorization(token,
    [ Google::Apis::GmailV1::AUTH_GMAIL_READONLY, Google::Apis::GmailV1::AUTH_GMAIL_LABELS]
  )
  service.request_options.retries = 3
  service
end

def get_drive_service(token)
  service = Google::Apis::DriveV3::DriveService.new
  service.authorization = oauth_authorization(token,
    [ Google::Apis::DriveV3::AUTH_DRIVE ]
  )
  service.request_options.retries = 3
  service
end

def oauth_authorization token, scope
  Signet::OAuth2::Client.new({
    authorization_uri: "https://accounts.google.com/o/oauth2/auth",
    token_credential_uri: "https://accounts.google.com/o/oauth2/token",
    client_id: ENV["G_CLIENT_ID"],
    client_secret: ENV["G_CLIENT_SECRET"],
    access_token: token["access_token"],
    refresh_token: token["refresh_token"],
    scope: scope
  })
end

get_gmail_service(token).create_user_label('me', 'test') #=> WORKS
get_drive_service(token).list_files #=> ERROR

这是我得到的错误

Google::Apis::AuthorizationError:Unauthorized
{
  "error": {
    "code": 401,
    "message": "The caller does not have permission",
    "errors": [
      {
        "message": "Active session is invalid. Error code: 4",
        "domain": "global",
        "reason": "authError",
        "location": "Authorization",
        "locationType": "header"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

从所有搜索来看,令牌似乎已经过期,但我认为令牌没有过期,因为它们同时在Gmail API上工作。
”我试过什么?**
1.我启用了驱动器API。
1.确保同意屏幕的OAuth2范围为'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/drive',
1.已尝试使用DriveV2而不是V3客户端
1.搜索类似错误的时间。几乎没有关于"Active session is invalid. Error code: 4"的结果

  1. ChatGPT问道
sr4lhrrt

sr4lhrrt1#

该403响应是由Google Drive被策略禁用引起的,可以通过per Organizational Unitvia Group membership来完成。403响应与401响应不同,401响应实际上返回了一个 * 有用的 * details有效负载,当 * 只是 * access Google Drive with the Drive SDK API被关闭时,而不是驱动器本身。我不相信超级管理员凭据受到这种限制,但谷歌工作区是一个神秘的野兽,所以它是 * 可能 *
这是一个可怕的错误,但值得庆幸的是,它是独一无二的,它将有望导致人们对这个问题
据我所知,除了调用the GET /about endpoint(或类似的“应该总是工作”请求)并恢复401或403响应以了解每个用户的情况之外,没有办法提前知道这些策略是否到位。

相关问题