Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
In den beiden Artikeln “OAuth2-Token für Google per .NET-App holen” (www.vbentwickler.de/413) und “Google-Token per DLL holen” (www.vbentwickler.de/409) haben wir Techniken beschrieben, mit denen wir ein Google OAuth2-Token ermitteln können, das wir für den Zugriff auf die Google Rest API per VBA benötigen. Dazu haben wir das NuGet-Paket Google.Apis.Calendar.v3 verwendet. Leider funktionierte das Ermitteln des Access-Tokens mit dem Refresh-Token nicht wie gewünscht. Also stellen wir in diesem Artikel eine Erweiterung der Projekte aus den vorgenannten Artikeln vor, mit denen wir den Zugriff immer erneuern können – wenn auch jeweils auf Kosten einer erneuten Anmeldung über den Webbrowser.
Wie erhielten, wenn wir per VBA die mit den oben genannten Lösungen ermittelten Access-Token für den Zugriff auf die Google Calendar-API genutzt haben, in vielen Fällen die Meldung, dass Token nicht mehr gültig sei (siehe Bild 1).
Bild 1: Fehlermeldung bei fehlgeschlagener Authentifizierung
Andererseits erlaubten uns die in den beiden Projekten verwendeten Versuche der Authorisierung über die Methode AuthorizeAsync der Klasse GoogleWebAuthorizationBroker nicht, das Token zu erneuern oder dieses erneut freizuschalten.
Nach einer Weile intensiven Suchens haben wir im Internet herausgefunden, dass diese Klasse eine Datei im folgenden Verzeichnis anlegt:
C:\Users\[Benutzername]\AppData\Roaming\Google.Apis.Auth
Diese Datei heißt Google.Apis.Auth.OAuth2.Responses.TokenResponse-user und sieht wie in Bild 2 aus.
Bild 2: Die Datei mit den aktuellen Authentifizierungsdaten
Erst, wenn wir diese löschen, erhalten wir die Möglichkeit, uns mit dem Webdialog aus Bild 3 erneut zu authentifizieren.
Bild 3: Erneute Authentifizierung nach dem Löschen der Datei
Danach können wir wieder für eine Stunde mit diesen Zugangsdaten arbeiten, danach müssen wir uns erneut authentifizieren.
Herausfinden, ob das Konto noch verbunden ist
Wenn wir das Konto so ausgewählt und den Zugriff gestattet haben, können wir mit den VBA-Routinen, die wir zum Beispiel im Artikel Google Calendar per Rest-API programmieren (www.vbentwickler.de/410) vorgestellt haben, auf den Kalender des Benutzers zugreifen, in dessen Kontext wir den Zugriff freigeschaltet haben.
Manchmal gelingt dies nicht, und wir können dann die Verbindung für dieses Konto zuerst löschen und dann wieder herstellen. Dazu müssen wir erst einmal wissen, wo man einsieht, ob für dieses Konto überhaupt noch eine Verbindung besteht.
Dazu geben wir im Browser die folgende URL ein:
https://myaccount.google.com/
Auf der nun erscheinenden Seite wählen wir links den Bereich Sicherheit aus und scrollen dann nach unten zu Ihre Verbindungen zu Drittanbieter-Apps und -diensten (siehe Bild 4).
Bild 4: Der Bereich Sicherheit im Google-Benutzerkonto
Hier erscheint bereits der Eintrag namens amvGoogleCalender, den wir untersuchen wollen. Sollte dieser nicht direkt sichtbar sein, klicken wir unten auf Alle Verbindungen ansehen.
Danach klicken wir auf den Eintrag amvGoogleCalendar. Es erscheint die Anzeige aus Bild 5. Hier sehen wir zwei Möglichkeiten:
Bild 5: Details zur App amvGoogleCalendar
- Anzeige von Details über die Zugriffsberechtigungen
- Löschen der Verbindungen mit der App amvGoogleCalendar
Wenn wir die erste Möglichkeit nutzen und auf die Schaltfläche Details ansehen klicken, finden wir die Seite aus Bild 6 vor. Hier sehen wir wichtige Informationen, zum Beispiel wann der Zugriff gewährt wurde – also wann das Access-Token freigeschaltet wurde. Wir können noch einen Bereich aufklappen, der uns anzeigt, welche Berechtigungen wir der App genau freigeben. Wir können aber auch hier auf Zugriff entfernen klicken, was dazu führt, dass eine Meldung mit den Konsequenzen angezeigt wird. In diesem Fall werden alle Berechtigungen der App für unseren Kalender entzogen. Wir können dies nur wiederherstellen, indem wir das Access-Token erneut generieren.
Bild 6: Details über die Zugriffsberechtigungen
Entfernen wir die Zugriffsrechte für die App und versuchen anschließend, mit den VBA-Prozeduren auf den Google-Kalender zuzugreifen, erhalten wir wieder die Antwort, dass wir mit ungültigen Credentials zugegriffen haben.
Erneut anmelden
Rufen wir nun beispielsweise die Funktion GetTokens aus der VBA-Lösung auf, läuft diese ohne Probleme durch und zeigt uns eine Meldung mit den ermittelten Daten, in diesem Fall dem Access-Token und dem Refresh-Token (siehe Bild 7).
Bild 7: Meldung mit den ermittelten Zugriffsdaten
Allerdings erscheint kein Webbrowser mit der Abfrage des zu verwendenden Kontos und der Bestätigung des Zugriffs durch die App amvGoogleCalendar auf dieses Konto. Das heißt nichts Gutes, denn dieser Schritt sollte nach dem Entfernen und dem Erneuern der Berechtigungen erfolgen.
Hier ist nun das oben beschriebene Problem aufgetreten: Dadurch, dass die Datei Google.Apis.Auth.OAuth2.Responses.TokenResponse-user noch im Ordner C:\Users\User\AppData\Roaming\Google.Apis.Auth gespeichert ist, nimmt die DLL an, das dies noch gültige Zugangsdaten sind.