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