Letzten Monat habe ich mit der Arbeit an einer GAE App mit Python fertig, die umfangreiche Google APIs für die Verwaltung der Google-Ressourcen innerhalb der Domain des Unternehmens durch den Google-Administrator verwendet. Die App wurde fertiggestellt !!!, aber diesen Monat hat Google angekündigt, dass die EmailSettings-API, die ich gerade implementiere, nicht länger unterstützt wird und die E-Mail-Einstellungen auf die Google Mail-API migriert werden; Bis jetzt haben sie einige der Einstellungen migriert (d. h. Senden als Alias, Weiterleitung, Abwesenheitsnotiz und Unterschrift). Auf der von google zusammengestellten Migrationsdokumentation weisen sie auf die großen Unterschiede zwischen den beiden APIs sowie auf einen etwas vagen Hinweis auf die Migration hin. Jedenfalls versuche ich derzeit, die neue API zu implementieren, um Send-as-Einstellungen mit einem Dienstkonto zu ändern. Hier ist, wie ich den Dienst für das Dienstkonto erschaffe (auch dies ist Python):Gmail Einstellungen API Backend Fehler - Python
scopes = ['https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.settings.basic', 'https://www.googleapis.com/auth/gmail.settings.sharing']
email = "[email protected]"
credentials = oauth2.service_account.build_credentials(scope=scopes, user=me)
http = httplib2.Http()
credentials.authorize(http)
service = google_api_helper.build("gmail", "v1", credentials)
body = {'emailAddress':'[email protected]'}
service_2.users().settings().updateAutoForwarding(userId="me", body=body).execute()
In diesem speziellen Beispiel, ich versuche die Autoforwarding Einstellung zu aktualisieren, aber es ist das gleiche Szenario und Fehler, wie einige die Send-as-Einstellungen. Das Problem, das ich habe, ist das folgende; Für die "heiklen Einstellungen", wie Google sie aufruft, muss ich den Bereich verwenden: 'https://www.googleapis.com/auth/gmail.settings.sharing', der ein Dienstkonto benötigt, damit es funktioniert.
Jedes Mal, wenn ich versuche, obwohl es zu verwenden, erhalte ich eine 500-Fehlermeldung:
HttpError: https://www.googleapis.com/gmail/v1/users/me/settings/autoForwarding?alt=json returned "Backend Error">
Warum ich diese Störung erhalte, wenn ich die Domain weite Zugriff auf das Dienstkonto am Authentifizierung, ist dies eine API Fehler oder ist es die Art, wie ich die Oauth2-Authentifizierung derzeit implementiere? Ich habe ohne Erfolg mehrere Implementierungen versucht:
Mit Anwendung Default Authentication:
credentials = GoogleCredentials.get_application_default()
httpauth = credentials.authorize(Http())
service = build("gmail", "v1", http=http_auth)
aliases_2 = service.users().settings().sendAs().list(userId="[email protected]").execute()
die aktualisierte oauth2client Bibliothek verwenden und über eine lokale JSON-Datei:
credentials_new = ServiceAccountCredentials.from_json_keyfile_name("app/service_account_key.json", scopes)
delegated_credentials = credentials_new.create_delegated(sub="[email protected]")
http_auth = delegated_credentials.authorize(Http())
service = build("gmail", "v1", http=http_auth)
die veraltete oauth2client Bibliothek verwenden und mit die SignedJwtAssertionCredentials-Funktion, die in der neuen Implementierung der Bibliothek nicht mehr unterstützt wird:
credentials = SignedJwtAssertionCredentials(str(settings['oauth2_service_account']['client_email']).encode('utf-8'), settings['oauth2_service_account']['private_key'], scope=scopes, sub="[email protected]")
auth2token = OAuth2TokenFromCredentials(credentials)
# With this implementation i was able to provide the google admin account which is supposed to have super admin access to the "sub" parameter, this used to work for the EmailSettings API, but for this new implementation you need to pass the email of the user you are trying to gain access to.
# build service
# call API
Mit allen 3 Implementierungen konnte ich den Basic-Bereich aufrufen, aber immer wenn ich versuchte, irgendwelche Einstellungen unter dem Schirm des Settings.Sharing-Bereichs zu ändern, bekam ich die Backend-Fehlermeldung. Das macht mich verrückt und ich habe gerade diese App fertiggestellt !!!! Wenn Sie irgendwelche Ideen haben oder wenn Sie schon einmal auf dieses Problem gestoßen sind, lassen Sie es mich wissen !!!!! ...
Eric, ich danke Ihnen für Ihre Antwort ... Ich dachte mir so viel, seit ich 3 verschiedene Methoden der Genehmigung ausprobiert habe. Ich werde das Problem genau beobachten, aber ich habe bemerkt, dass dies nur für das Forwarding-Update erwähnt wird, aber es passiert tatsächlich für jeden Service/Ressource im Rahmen von "https://www.googleapis.com/auth" /gmail.settings.sharing; Wenn Sie Teil des Teams sind, das daran arbeitet, wenden Sie sich bitte an diese Ressourcen in diesem speziellen Bereich. Das direkte Problem ist aber das Autorisierungsproblem ... hoffentlich gibt es bald eine Lösung. – John
Wir haben gestern einen Fix bereitgestellt, der dieses Problem beheben sollte.Hinweis: Sie müssen die domänenweite Delegierung mit einem Dienstkonto verwenden, um Methoden zu verwenden, die den gmail.settings.sharing-Bereich benötigen. –
Eric, vielen Dank für die prompte Antwort, nachdem der Fehler behoben wurde !!! Ich werde die Funktionen, die ich brauche, implementieren, die in diesen Bereich fallen, und euch wissen lassen, ob ich mit anderen verwandten Themen konfrontiert werde. Sicher, wir erfüllen diese Anforderungen bereits (d. H. Ein Dienstkonto mit domänenweiter Delegierung), aber nochmals vielen Dank für das Heads-up. – John