1

Ich benutze Gmail API und ich versuche, E-Mails von allen Benutzern im Unternehmen zu holen. Aber wenn ich Code ausführen wie:Gmail API domänenweite Delegation

function runAPI(auth) { 
    var gmail = google.gmail('v1'); 
    gmail.users.threads.list({auth: auth, userId: '108800016305523828361'},'',function(err, response){ 
    if (err) { 
     console.log("The API returned an error: " + err); 
     return; 
    } 
    var threads = response.threads; 
    console.log(threads); 
    }) 
} 

ich Fehler:

The API returned an error: Error: Delegation denied for [email protected]

In Admin-Konsole ich dies tat:

enter image description here

Als Client-Name I id von der verwendeten client_secret.json Datei. Und für Umfang, gab ich ihm alle Berechtigungen.

Wie kann ich die domänenweite Delegierung für Google Mail-API ordnungsgemäß einrichten?

Antwort

1

Die Einrichtung ist in Ordnung, aber in Ihrem Code Du machst es falsch.

Dieser Code:

gmail.users.threads.list({auth: auth, userId: '108800016305523828361'},'',function(err, response)

speziell.

userId sollte „me“ jedoch, bevor Sie die Google Mail-API aufrufen, können Sie das Dienstkonto „JWT flow“ in Ihrem Code zu verwenden, benötigen einen oauth2 Berechtigungsnachweis für den Google Mail-Nutzer Sie wie beschrieben zugreifen möchten abzurufen in das Preparing to make an authorized API call Dienstkonto domänenweite Delegation doc.

Insbesondere nutzt das Ihr Dienstkonto des privaten Schlüssels zu verlangen, einen Berechtigungsnachweis für den Benutzer bekommen Sie wünschen (des Benutzers E-Mail in Ihrer Domain festlegen, die Sie in der setServiceAccountUser([email protected]) Funktion in der Anfrage zugreifen möchten). Dann können Sie das GoogleCredential in Ihrem Aufruf der Google Mail-API verwenden.

+0

Gibt es Unterlagen dazu? – Kunok

+1

Nur der Link "Vorbereiten einer autorisierten API-Verbindung", den ich oben angegeben habe. –

+0

Methode 'setServiceAccountUser ([email protected])' nicht für Node.js unterstützt? – Kunok

-1

Für die Frage Wie konfiguriere ich domänenweite Delegation für Google Mail-API ordnungsgemäß?

Ich denke, das documentation von Google kann Ihnen dabei helfen, folgen Sie einfach diesen Schritten, um domänenweite Autorität zu delegieren.

  1. Rufen Sie die Admin-Konsole Ihrer Google Apps-Domain auf. Wählen Sie Sicherheit aus der Liste der Steuerungen. Wenn Sie Sicherheit nicht aufgelistet sehen, wählen Sie Weitere Kontrollen von der grauen Leiste am unteren Rand der Seite, wählen Sie dann Sicherheit aus der Liste der Steuerelemente. Wenn Sie die Steuerelemente nicht sehen können, stellen Sie sicher, dass Sie als Administrator für die Domäne angemeldet sind.

  2. Select Mehr anzeigen und dann Erweiterte Einstellungen aus der Liste der Optionen.

  3. Select in der Authentifizierung Zugriff API-Client Abschnitt verwalten.

  4. Im Client Namen Feld geben Sie dasClient-ID des Dienstkontos. Sie finden die Kundennummer Ihres Dienstkontos auf der Seite Dienstkonten.

  5. Im Feld Ein oder mehrere API-Bereiche Geben Sie die Liste der Bereiche ein, für die Ihre Anwendung Zugriff erhalten soll. Wenn Ihre Anwendung beispielsweise einen domänenweiten Zugriff auf die Google Drive-API und die Google Kalender-API benötigt, geben Sie Folgendes ein: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.

    In Ihrem Fall verwenden Sie diese scope for Gmail API.

  6. Klicken Sie auf Autorisieren.

Weitere Informationen über die error 403 or Delegation denied for <user email>, lesen Sie in diesem Zusammenhang SO Frage:

+0

Also schlagen Sie vor, dass ich falsche Client-ID verwende? – Kunok

+1

überprüfen Sie einfach diesen Prozess, wenn Sie es richtig machen. Ich schlage Ihnen auch vor, die verknüpfte SO-Frage zu überprüfen, weil es Ihnen vielleicht auch eine Idee zu diesem Problem gibt :) – KENdi

+0

Nachdem ich ein Dienstkonto für das Projekt erstellt und die Client-ID in der Admin-Konsole verwendet habe, bekomme ich immer noch den gleichen Fehler. 'Delegation verweigert für k **** uno @ ul ***** vel.com'. Ich habe die QA geprüft, die du verlinkt hast, aber diese Antworten passten nicht zu meinem Fall. Da der Fehler besagt, dass meine E-Mail und nicht meine App abgelehnt wird, ist es möglich einzurichten, dass meine E-Mail berechtigt werden kann, auf alle Daten in unseren Google Apps zuzugreifen? – Kunok