Проблема с потоком автоматической аутентификации Gmail Api

Есть ли способ отправить электронное письмо с помощью Gmail Api с автоматической аутентификацией? Если у нас нет этой опции, нам нужно выбрать учетную запись аутентификации вручную. На самом деле это нежелательная ситуация. Выписка появляется на вкладке Google, которая открывается автоматически после выполнения шагов вручную:

Поток аутентификации завершен. Вы можете закрыть это окно.

После этого сообщения и аутентификации код отправляет электронное письмо на нужную учетную запись.

Example code:
from google.oauth2.credentials import Credentials

# Check if there is a valid token.pickle file
creds = None
if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = Credentials.from_authorized_user_file(token, SCOPES)

# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
        creds = flow.run_local_server(port=0)
    # Save the credentials for the next run
    with open('token.pickle', 'wb') as token:
        pickle.dump(creds, token)

Является ли учетная запись Gmail частью Google Workspace?

John Hanley 04.04.2023 00:24

Нет. Это моя индивидуальная учетная запись Gmail. Я использовал его как для создания учетной записи Gcp, так и для целевого почтового адреса. @Джон Хэнли

murat taşçı 04.04.2023 07:38

Тогда вы не можете использовать широкое делегирование домена, что является ответом, который вы выбрали. Эта функция существует только для учетных записей Google Workspace, подключенных к Google Cloud.

John Hanley 04.04.2023 09:02

Можем ли мы создать учетные записи рабочей области Google для отдельных учетных записей, подключенных к Google Cloud? (Полное делегирование домена) @John Hanley

murat taşçı 04.04.2023 09:34

Рабочая область основана на домене, которым вы владеете. Затем вы можете создавать новых пользователей в своем домене. Существует ежемесячная плата за пользователя.

John Hanley 04.04.2023 09:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предположительно, ваш код должен выполняться в облаке (облачный запуск? облачная функция? и т. д.), поэтому он выполняется под какой-либо (предпочтительно определенной, выделенной, с соответствующими минимальными разрешениями IAM) сервисной учетной записью.

Вероятно, вы хотели бы делегировать этой учетной записи службы полномочия на уровне домена.

Подробности здесь: Настройте делегирование на уровне домена для сервисного аккаунта , здесь: Управление доступом к API с делегированием на уровне домена и здесь: Делегирование полномочий на уровне домена сервисному аккаунту

Вот ответ переполнения стека, в котором описан этот подход на питоне: Ошибка учетной записи службы Gmail API Authorized_client даже с полномочиями на уровне домена - как получить доступ к учетной записи gmail без каких-либо закрытых ключей из облачной функции.

Скрестим пальцы, фрагмент кода в этом ответе по-прежнему верен.

Код работает на normal.desktop, а идентификаторы клиентов OAuth 2.0 подготовлены для настольного приложения, и я не создал учетную запись службы. Я также определил comopse, разрешения на отправку для Gmail API. @аль-данн

murat taşçı 03.04.2023 14:42

@murattaşçı единственная автоматическая аутентификация, которую вы можете выполнить, - это учетные записи служб и делегирование всего домена, как объясняется в ответе аль-данна. Для обычной аутентификации пользователя поток OAuth неизбежен, и лучшее, что вы можете сделать, это получить токен обновления от пользователя и продолжать его использовать, но вам все равно придется вручную авторизовать приложение, чтобы получить этот токен в первую очередь. .

Daniel 03.04.2023 20:39

Другие вопросы по теме