Google OAuth-Verifizierung mit Gmail-Node: Wie bestätigt man die Verifizierung, wenn GmailOAuth2Api 6 Bereiche erzwingt?

Hi zusammen,

Ich baue einen selbstgehosteten KI-Email-Assistenten mit n8n für kleine Unternehmen und bereite mich derzeit auf die Google OAuth-Verifizierung vor.

Der Workflow:

  • Liest ungelesene Gmail-Nachrichten
  • Filtert automatisierte E-Mails
  • Sendet den Inhalt an Claude
  • Erstellt Gmail-Entwürfe
  • Markiert die Nachricht als gelesen nur nach erfolgreicher Verarbeitung
  • Sendet eine Ausführungszusammenfassung

Die Anwendung löscht E-Mails niemals dauerhaft.

Was ich herausgefunden habe

Nach einer Untersuchung stellte ich fest, dass die native Gmail OAuth2 API Berechtigung ihre Scopes hardcodiert hat.

Sie fordert immer an:

  • gmail.labels
  • gmail.addons.current.action.compose
  • gmail.addons.current.message.action
  • mail.google.com
  • gmail.modify
  • gmail.compose

Die Scope-Eigenschaft ist verborgen, sodass es keine Möglichkeit gibt, sie über die Benutzeroberfläche anzupassen.

Ich bin auch auf Community-Diskussionen gestoßen, die zeigen, dass das einfache Einschränken von Scopes in Google Cloud zu einem OAuth-Autorisierungsfehler mit HTTP 403 führt, da die Gmail-Berechtigung immer noch die vollständige hardcodierte Scope-Liste anfordert.

Es gibt auch eine offene Feature-Anfrage, die fragt, ob der Gmail-Knoten die generische Google OAuth-Berechtigung statt der festen Gmail-Berechtigung unterstützen kann.

Meine Frage

Hat hier jemand die Google OAuth-Verifizierung tatsächlich abgeschlossen und dabei den nativen Gmail-Knoten beibehalten?

Wenn ja:

  • Hat Google die Standard-Hardcoded-Scopes akzeptiert?
  • Musstest du mail.google.com begründen?
  • Hat Google Änderungen angefordert?

Oder hast du stattdessen die Gmail-Knoten durch HTTP Request-Knoten mit einer generischen Google OAuth2-Berechtigung und der Gmail REST API ersetzt?

Ich suche nicht nach theoretischem Ratschlag – ich würde wirklich gerne Feedback von jemandem bekommen, der Googles Verifizierungsprozess erfolgreich mit einer produktiven n8n-Anwendung abgeschlossen hat.

Danke!

Teile deinen Workflow

(Wähle die Knoten auf deinem Canvas aus und verwende die Tastenkombinationen CMD+C/CTRL+C und CMD+V/CTRL+V zum Kopieren und Einfügen des Workflows.)

Gib die Ausgabe des letzten Knotens aus

Informationen zu deinem n8n-Setup

  • n8n-Version: “localhost”
  • Datenbank (Standard: SQLite):
  • n8n EXECUTIONS_PROCESS-Einstellung (Standard: own, main):
  • n8n läuft über (Docker, npm, n8n cloud, Desktop-App): DOCKER
  • Betriebssystem:

Hi @Jidenkaes
Der Blocker sind nicht die sechs Scopes als Gruppe, sondern dass der native Gmail-Node https://mail.google.com/ hardcodiert, einen eingeschränkten Scope (Vollzugriff, einschließlich permanentem Löschen). Dieser einzelne Scope ist es, der dich auf Googles restricted-scope-Weg bringt: die jährliche Sicherheitsprüfung durch Dritte, plus Reviewer, die eine Vollzugriff-Anforderung von einer App ablehnen, die nur liest, Entwürfe erstellt und als gelesen markiert.

Dein ganzer Workflow (ungelesene Nachrichten lesen, Entwürfe erstellen, das UNREAD-Label entfernen) passt in einen Scope, gmail.modify. Google klassifiziert ihn als sensitiv statt eingeschränkt, speziell weil er Mails nicht permanent löschen kann, was deine App ohnehin nie tut. Das hält dich bei der leichteren sensitive-scope-Verifizierung statt bei der eingeschränkten, und gibt dir eine saubere least-privilege-Begründung.

Der Gmail-Node lässt dich seine Scopes nicht reduzieren, also ersetze diese Nodes durch HTTP Request-Nodes, die die Gmail REST API anrufen, authentifiziert mit einer generischen Google OAuth2 API-Anmeldedaten, wo du den Scope selbst eingibst:

https://www.googleapis.com/auth/gmail.modify

Danke, das ist sehr hilfreich. Nur zur Klarstellung: Hast du persönlich Googles OAuth-Verifizierung mit dem HTTP Request + generischen Google OAuth2-Ansatz abgeschlossen, oder ist dies die Architektur, die du empfehlen würdest? Ich versuche zu ermitteln, ob jemand Googles Review mit diesem Setup erfolgreich bestanden hat.