Julian Handl Logo
Julian Handl
menu-to-close

Ein Google API mit Auth0 abfragen

Vor kurzem stand ich vor der Herausforderung, mit einem über Auth0 authentifizierten User ein Google API abzufragen. Wenn sich der User mit seinem Google Account anmeldet, ist er bereits authentifiziert und kann beim Anmelden auch die Berechtigung für Teile seines Accounts erteilen, sofern sie angefordert wurden.

Mein konkreter Einsatz: Ich will die Kontakte des angemeldeten Users abfragen. Das geht mit der People Api von Google.

Die entsprechende Doku ist leider sehr verstreut und schwer zu finden. Daher gibt es hier nun einen kurzen Leitfaden, um die People API und weitere Google APIs mit einem Auth0 authentifizierten User zu verwenden.

1. User Berechtigung anfragen

Zuerst müssen wir beim Anmeldevorgang die Berechtigung für die Daten des Users anfragen. Dazu gehen wir in der Sidebar links auf den Bereich Authentication und den Subbereich Social.

Dort können wir Google als Social Provider wählen und kommen zu den Settings. Hier können wir wählen, welche Permissions wir vom User Account erhalten wollen.

2. Eine echte ClientId und Secret eintragen

Damit das Anfragen der Berechtigungen auch wirklich funktioniert müssen wir statten den Development Keys von Auth0 eine echte Client ID und eine Client Secret von Google eintragen. Das passiert im gleichen Settingsbereich wie der letzte Schritt.

Die ClientID erhalten wir von Google. Dazu müssen wir auf die Google Cloud Platform wechseln. Im Bereich APIs und Dienste wechseln wir auf den Subbereich Anmeldedaten. Mit dem Button Anmeldedaten erstellen können wir eine neue OAuth-Client-ID erstellen. Als Projekt verwenden wir eine Webanwendung.

OAuth-Zustimmungsbildschirm

Mit einer sehr hohen Wahrscheinlichkeit müsst ihr euren OAuth Zustimmungsbildschirm konfigurieren. Beim Erzeugen der Anmeldedaten wir Google euch darum bitten.

Zuerst müsst ihr den Namen und eine Support E-Mail (eure E-Mail) eintragen.

Bei der Anwendungsdomain tragt ihr die URL eurer App ein, wenn ihr aber noch entwickelt, tragt ihr einfach heure localhost URL mit Port zu eurer App ein.

Die autorisierte Domain hierfür ist auth0.com, weil wir uns über auth0 anmelden.

Danach klickt auf einfach auf Speichern und Fortfahren. Auf der nächsten Seite geht es um die Berechtigungen, die als Scopes erteilt werden. Hier müsst ihr den Scope für die API die ihr von Google nutzen wollt unter Meine vertraulichen Bereiche eintragen. In meinem Fall war das: https://www.googleapis.com/auth/contacts

Weiter mit den Anmeldungsdaten

Nun könnt ihr die OAuth Anmeldedaten erzeugen und die Client ID und das Client Secret bei Auth0 eintragen. (Siehe Screenshot weiter oben)

Als autorisierte Javascript Quelle gebt ihr eure Auth0 Projekt URL ein. z.B.: https://projektname.eu.auth0.com

Bei autorisierte Weiterleitungs URIs geht ihr die gleiche URL mit dem Callback eurer Application ein. Z.B.: https://projektname.eu.auth0.com/login/callback

3. Den OAuth Token abrufen

Auth0 Management API installieren

Um den tatsächlichen OAuth Token eures Users zu erhalten, braucht ihr in eurer App die Auth0 Management API. Diese kann ganz einfach in Auth0 unter Applications -> APIs hinzugefügt werden. Je nach eurer Technologie gibt es eine SDK dafür, die ihr in eurem Backend installieren könnt.

Berechtigung erteilen

In der Auth0 Oberfläche müsste ihr nun wie im Screenshot gezeigt eure App als Machine to Machine Application autorisieren. Danach könnt ihr im Reiter eurer App die Berechtigungen auswählen. Wichtig ist hier die read:users und read:user_idp_tokens Berechtigung. Danach unten auf Update klicken und alles wird gespeichert.

Den User und seine Token abrufen

Nun sind wir im letzten Schritt angelangt. Ihr müsst also mit dem Management Api Client in eurem Backend einen User von Auth0 abfragen. (Vermutlich der User der gerade eingeloggt ist)

Als Response bekommt ihr ein Userobjekt. Darin findet ihr eine Property identities. Hier ist auch die Google OAuth Identity enthalten. In diesem Objekt wird ein access_token mitgeliefert. Das ist nun endlich der OAuth Token, mit dem ihr eure Abfragen an das Google Api authentifizieren könnt.