Привет, я поздно ночью взламывал и тестировал клиент Google API для Ruby.
Я впал в ошибку, возможно, по недоразумению.
Что я уже сделал
- Я уже создал приложение в консоли разработчика Google
- Я включил API календаря
- Я создал ключ сервера и загрузил файл p12.
- Мне удалось увидеть эти метаданные календаря с помощью проводника Google API и браузера oauth, поэтому идентификаторы подтверждены, а также разрешения, поскольку oauth браузера может просматривать метаданные
Что я пытаюсь сделать:
Я пытаюсь получить метаданные (я попробую события позже) из частного общего календаря, где у меня есть разрешения на чтение (через группу) в приложениях Google для рабочей учетной записи в Ruby на службе для аутентификации службы
Как я пытаюсь это сделать
С этим кодом:
require 'google/api_client'
require 'pp'
client = Google::APIClient.new
cal = client.discovered_api('calendar','v3')
id = '[email protected]' # 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 => '[email protected]', # 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"
}
}
Но если я изменю идентификатор на «основной»
Я получил:
{
"kind": "calendar#calendar",
"etag": "\"dAAhx6wYoPw2vqRAe54lk5wa0XQ/WEglF6_c5pVHKyggcENvvX1cS9g\"",
"id": "[email protected]", #same as issuer id ??? WTF
"summary": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"timeZone": "UTC"
}
Это похоже на календарь, но это похоже на календарь по умолчанию для учетной записи «эмитент электронной почты», которая отображается в поле «электронная почта» ключа сервера.
Я также пытался добавить поле :person = 'email'
в client.authorization
, но потом получаю сообщение об ошибке при создании токена авторизации.
Я не смог найти способ получить доступ к API в качестве другой почтовой учетной записи, удаленной от этого @developer.gserviceaccount.com, так что я делаю неправильно?