Могут ли учетные записи службы делегирования Google API на уровне домена разрешить отправку почты через Gmail, выдавая себя за пользователя?

Я создал учетную запись службы в своем домене Google Apps с включенным делегированием всего домена и включенными полными областями API gmail и pubsub для идентификатора клиента учетной записи службы из панели управления моего домена.

Я могу успешно создать экземпляр клиента API Gmail и выдать себя за одну из учетных записей домена с помощью:

    credentials = oauth2client.SignedJwtAssertionCredentials(secret['client_email'], secret['private_key'], ['https://www.googleapis.com/auth/gmail.modify'], sub='[email protected]')

    http = httplib2.Http()
    credentials.authorize(http)

    return discovery.build('gmail', 'v1', http=http)

Я пытаюсь установить веб-перехватчик push-уведомлений для учетной записи олицетворенного пользователя следующим образом. Указанное название темы является допустимым.

  request = {
    'labelIds': ['INBOX'],
    'topicName': 'projects/projectName/topics/topicName'
  }

  gmail.users().watch(userId='me', body=request).execute()

После звонка на просмотр я получаю следующую ошибку:

<HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Invalid developer ID">

Вызовы других методов API Gmail (список сообщений и т. Д.) Успешны.

Могут ли учетные записи служб с делегированием на уровне домена включать веб-перехватчики push-уведомлений Gmail для учетной записи пользователя домена?


person Robbie    schedule 21.12.2015    source источник
comment
Я пробовал, и да, это возможно. Вы давали доступ к gmail в своей теме?   -  person Gerardo    schedule 28.12.2015
comment
Вы когда-нибудь находили решение этой проблемы? Я столкнулся с той же проблемой, и [email protected] действительно получил права на публикацию моей темы.   -  person Dark Falcon    schedule 05.01.2016
comment
Я не уверен (пока), собираюсь ли реализовать это сам. Но похоже, что если вы сначала выдадите себя за пользователя, а затем попытаетесь подписаться на тему с этим пользователем, им потребуется доступ к этой теме. Возможно, попробуйте вместо того, чтобы выдавать себя за них, просто использовать учетную запись службы и указать фактический идентификатор пользователя вместо того, чтобы говорить userId = me ... Как в gmail.users().watch(userId='xxxxxxxxx', body=request).execute()   -  person Austin Floyd    schedule 13.01.2016


Ответы (1)


Недавно я успешно сделал это с учетной записью службы, сделав именно это ^^, просто передайте адрес электронной почты пользователя вместо «меня» в вызове настройки клиента pubsub.

person ndom91    schedule 07.03.2019