REST API hinter Webseiten Login nutzen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
speerwerfer
User
Beiträge: 5
Registriert: Samstag 27. Mai 2017, 07:57

Moin zusammen,

ich möchte gerne die API einer Webseite nutzen, die erst nach einem Login erreichbar ist. Das ganze ist nicht offiziell von der Webseite unterstützt. Wenn ich auf der Webseite angemeldet bin, und dann meinen Bearer Token in der Browserkonsole (F12) mit

Code: Alles auswählen

JSON.parse(localStorage.getItem("localUser")).stsTokenManager.accessToken;
auslese, kann ich die API per CURL oder Postman mit dem Bearer Token ansprechen und bekomme korrekte Antworten.

Das Login ist leider etwas umständlicher gemacht, als ich das erwartet habe. Hier scheint https://identitytoolkit.googleapis.com/ genutzt zu werden. In der Analyse tauchen zwei POST Verbindungen für den Login auf:

Code: Alles auswählen

https://identitytoolkit.googleapis.com/v1/accounts:createAuthUri?key=*****
https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=*****
Bei dem zweiten Post bekomme ich in der Antwort einen idToken zurückgegeben. Das scheint dann genau der Bearer Token zu sein, den ich für die API brauche. Ich möchte nun gerne per Pythonscript an diesen Bearer Token kommen, um dann über die API die Daten abzurufen.

Ich bin jetzt nicht so sattelfest in Python und kenne mich schon garnicht mit den vorhandenen Bibliotheken aus. Wie würde man so etwas am geschicktesten lösen. Am liebsten Plattformunabhängig.

VG
Martin
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Auf die selbe Weise, wie du auch die API dahinter benutzen würdest.
Es sind ja auch nur HTTP-Requests.
speerwerfer
User
Beiträge: 5
Registriert: Samstag 27. Mai 2017, 07:57

So einfach scheint es nicht zu sein. Wenn ich Username und Passwort auf der Webseite eingebe und mir den Bearer Token dann aus dem Browser hole, kann ich damit in Postman die API ansprechen.
Wenn ich die beiden URL von googleapis.com schon in Postman ausführe (mit dem gleichen Payload) dann erhalte ich zwar auch einen Token, mit dem kann ich dann aber nicht die API abfragen. Ergebnis: HTTP 401 Unauthorized

Irgendwie fehlt mir hier auch das Zusammenspiel zwischen der Seite der API und googleapis.com.

Irgendwas fehlt mir noch.
Antworten