嗨,我在深夜破解和测试 Ruby 的 google api 客户端。
我可能是由于误解而误入歧途。
我已经做了什么
- 我已经在谷歌开发者控制台中创建了一个应用程序
- 我启用了日历 api
- 我创建了服务器密钥并下载了 p12。
- 我设法使用google api explorer和浏览器oauth查看了日历元数据,因此确认了id并且权限也被确认为浏览器的oauth可以查看元数据
我正在尝试做的事情:
我正在尝试从私人共享日历中获取元数据(稍后我将尝试事件),在该日历中,我在 Ruby 中的工作帐户的 google 应用程序中具有读取权限(通过组),提供服务身份验证服务
我是如何努力做到的
使用此代码:
require 'google/api_client'
require 'pp'
client = Google::APIClient.new
cal = client.discovered_api('calendar','v3')
id = 'xxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com' # id is the confirmed calendar ID
key = Google::APIClient::KeyUtils.load_from_pkcs12('sl.p12', 'notasecret')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/calendar',
:issuer => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com', # confirmed issuer
:signing_key => key
)
client.authorization.fetch_access_token!
result = client.execute(
:api_method => cal.calendars.get,
:parameters => { 'calendarId' => id }
)
puts result.response.body
pp result
收集的结果
当我这样做时会得到 404,类似于“那个日历不存在”
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found"
}
],
"code": 404,
"message": "Not Found"
}
}
但是,如果我更改每个“主要”的 id
我得到:
{
"kind": "calendar#calendar",
"etag": "\"dAAhx6wYoPw2vqRAe54lk5wa0XQ/WEglF6_c5pVHKyggcENvvX1cS9g\"",
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com", #same as issuer id ??? WTF
"summary": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"timeZone": "UTC"
}
这似乎是一个日历,但它就像出现在服务器密钥“电子邮件”字段中的“电子邮件颁发者”帐户的默认日历
我也尝试向其中添加一个:person = 'email'
字段,client.authorization
但随后在创建身份验证令牌时出现错误
我找不到从该@developer.gserviceaccount.com 访问其他邮件帐户的方法,所以我做错了什么?