AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source)
Thema durchsuchen
Ansicht
Themen-Optionen

Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source)

Ein Thema von mjustin · begonnen am 4. Mär 2019 · letzter Beitrag vom 8. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2      
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source)

  Alt 4. Mär 2019, 15:37
Da ich zum Thema OAuth 2.0 Authorization hier ab und zu etwas gelesen habe, aber Beispielprojekte für eine serverseitige Umsetzung in Object Pascal fehlten, habe ich heute anhand der Google Dokumentation zum Einsatz von OAuth 2.0 auf Web Servern ein Beispielprojekt erstellt:

Google API access with OAuth 2.0 authorization for Daraja HTTP Server Applications (full source code)

Das Programm kann mit Lazarus 2.0 und mit Delphi 2009 und neuer kompiliert werden.

Neben der IDE und einem Google Account mit Zugang zur Developer API sind nur OpenSSL DLLs und SuperObject (für Delphi) erforderlich.

Feedback ist natürlich sehr herzlich willkommen.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#2

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 4. Mär 2019, 23:04
Danke für's tun!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.067 Beiträge
 
Delphi 12 Athens
 
#3

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 5. Mär 2019, 08:33
Sehr schön, das ist immer wieder ein Thema.
Laufen diese Komponenten auch unter Firemonkey (Android, iOS, MAC) ?
Ich denke das ist VCL, oder gibt es davon auch FMX Versionen ?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 5. Mär 2019, 08:41
Sehr schön, das ist immer wieder ein Thema.
Laufen diese Komponenten auch unter Firemonkey (Android, iOS, MAC) ?
Ich denke das ist VCL, oder gibt es davon auch FMX Versionen ?
VCL und FireMonkey sind reine Oberflächen-Bibliotheken, diese werden nur clientseitig eingesetzt.

Der Daraja HTTP Server basiert auf Indy's HTTP Server Komponente und erleichtert zur Erstellung von Webververn. Auf diese wird dann mit HTTP Clients zugegriffen (also einem Browser oder einem WebService Clients).

Die Oberfläche wird daher bei Einsatz eines Webbrowsers über HTML definiert, oder - wenn man einen WebService erzeugt - entfällt diese ganz, oder man schreibt eine Oberfläche die aus den Daten des WebService gespeist wird. Da für die Google-Anmeldung (ausser unter Android) jedoch immer eine Benutzerinteraktion im Browser notwendig ist, kann sie für WebServices so nicht ohne weiteres eingesetzt werden.

Laufen würde dieser Code mit Delphi (Rio) auch unter Linux, aber wegen ARC nicht auf iOS, Mac oder Android.
Michael Justin

Geändert von mjustin ( 5. Mär 2019 um 09:10 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 5. Mär 2019, 09:15
Vielen Dank für das Feedback soweit!

Ich hoffe, als nächstes den Code für das Verfahren Using OAuth 2.0 for Server to Server Applications bauen zu können. Da ich nicht auf Google festgelegt bin wäre ich auch an anderen OAuth 2.0 Integrationen interessiert und für Vorschläge offen, auf welche Provider (Dienstanbieter) ein Zugriff interessant wäre. Voraussetzung ist nur dass es kostenlose Dienste mit guter Dokumentation sind.
Michael Justin

Geändert von mjustin ( 5. Mär 2019 um 09:42 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#6

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 6. Mär 2019, 18:23
Ich verstehe die Antwort noch nicht ganz: könnte man den OAuth Code ausdem Server
extrahieren und eine VCL oder FMX Anwendung bauen, welche diesen Code benutzt um
sich mittels OAuth 2.0 bei einem entsprechenden Dienst der das unterstützt anzumelden?

Oder muss man unbedingt eine Webseite bauen? Wozu?
Wird da nicht erstmal irgendwo Benutzername/Passwort abgefragt und dann ein Token
generiert und die eigene Anwendung weißt sich dann mit diesem Token gegenüber dem
Server aus?

Grüße

TurboMagick
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 6. Mär 2019, 19:03
Ich verstehe die Antwort noch nicht ganz: könnte man den OAuth Code ausdem Server
extrahieren und eine VCL oder FMX Anwendung bauen, welche diesen Code benutzt um
sich mittels OAuth 2.0 bei einem entsprechenden Dienst der das unterstützt anzumelden?

Oder muss man unbedingt eine Webseite bauen? Wozu?
Wird da nicht erstmal irgendwo Benutzername/Passwort abgefragt und dann ein Token
generiert und die eigene Anwendung weißt sich dann mit diesem Token gegenüber dem
Server aus?
Das Token hat nur eine befristete Gültigkeit, es muss daher regelmäßig aktualisiert werden.

Wie aber bekommt man das Token dann vom Server in die VCL/FMX Anwendung?

Natürlich, wenn man den Server auf dem gleichen System wie die Anwendung laufen lassen kann, kein Problem - aber nicht immer ist das eine "vertrauenswürdige Umgebung".

Und: der Server benötigt eine client_id und ein client_secret, ohne die man kein Token bekommt. Beide soll man geheim halten.
Wenn die Anwendung (einschliesslich Server) auf dem Desktop des Endanwenders läuft, gibt man private Schlüssel aus der Hand, was missbraucht werden kann.
Michael Justin

Geändert von mjustin ( 6. Mär 2019 um 19:49 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#8

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 6. Mär 2019, 23:23
Hallo,

danke für den Erklärungsversuch. Nur ist das noch so Neuland für mich, dass ich doch nochmal nachfragen muss.

Beiuspiel: ein Server der bestimmte Webservices anbietet und den ich nicht unter meiner Kontrolle habe
(beispielsweise GitHub) erfordert für die API Benutzung Authentifizierung und kann das per OAuth 2.0.

Wenn ich eine VCL/FMX App schreiben wollte die diese APIs nutzt, müsste ich irgendwelche Anmeldeinformationen
(z.B. Benutzername/Passwort) an den Server schicken (wie? definiert OAuth das?) und würde wenn ich's richtig
verstanden habe ein Token bekommen, welches für einen begrenzten Zeitraum gültig ist. Richtig?

Vermutlich ist im Token vermerkt bis wann bzw. wie lange es gültig ist.

Dieses Token muss ich bei den entsprechenden Aufrufen mitschicken, sonst sagt der angefragte Server nur:
"keine Berechtigung". Richtig?

Und ich könnte aufpassen wann das Token abläuft um mit den gemerkten Logindaten rechtzeitig ein neues
anzufordern. Richtig?

Token und Logindaten würde ich vorzugsweise im Speicher der Anwendung halten, da andere Anwendungen dann
schwerer dran kommen als an eine Datei. Richtig?

Oder wozu bräuchte ich dann noch einen Server unter meiner Kontrolle?

Grüße und Danke für's Erklären

TurboMagick
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 7. Mär 2019, 08:40
Beiuspiel: ein Server der bestimmte Webservices anbietet und den ich nicht unter meiner Kontrolle habe
(beispielsweise GitHub) erfordert für die API Benutzung Authentifizierung und kann das per OAuth 2.0.
Für die Zugriffe auf die API mit den eigenen Benutzeranmeldedaten ist kein OAuth 2.0 notwendig. Wenn Du nur auf deine eigene Daten per API zugreifen willst bietet GitHub auch einfachere Wege an).

OAuth 2.0 ist für Third-Party-Apps, die auf auf Daten zugreifen wollen die nicht ihnen gehören. Diesen vertraut man dann nicht die eigenen GitHub-Anmeldedaten an.

Beispiel: ich biete eine Quelltextformatierung für deine bei GitHub gespeicherten Quelltexte an, als sogenannte "Third-Party-App".

Damit ich aber auf die GitHub-Daten deines Kontos zugreifen darf, bitte ich dich zuerst um eine Anmeldung und Authorisierung über GitHub per OAuth 2.0. Von GitHub erhalte ich dann Zugang zu deinen Daten. Allerdings nicht deinen Benutzernamen/Passwort, sondern nur ein Token.

In deinem GitHub-Konto kannst Du dann sehen, dass du meiner App die Berechtigung erteilt hast auf deine Repositories zuzugreifen.


Wenn ich eine VCL/FMX App schreiben wollte die diese APIs nutzt, müsste ich irgendwelche Anmeldeinformationen
(z.B. Benutzername/Passwort) an den Server schicken (wie? definiert OAuth das?) und würde wenn ich's richtig
verstanden habe ein Token bekommen, welches für einen begrenzten Zeitraum gültig ist. Richtig?
Richtig: wenn man sich per OAuth 2.0 anmelden will, zeigt dein Webbrowser eine Loginmaske und wenn Du deine Anmeldedaten sendest, erhält dein Browser einen HTTP Redirect zurück, d.h. er soll auf eine Seite gehen die der Third-Party-Anbieter bei GitHub hinterlegt hat. (Redirects werden von OAuth extensiv genutzt - siehe RFC 6749 Spezifikation)

Zum Beispiel:

http://beautifulsourcecode.com/oauthcallback


Vermutlich ist im Token vermerkt bis wann bzw. wie lange es gültig ist.

Dieses Token muss ich bei den entsprechenden Aufrufen mitschicken, sonst sagt der angefragte Server nur:
"keine Berechtigung". Richtig?

Und ich könnte aufpassen wann das Token abläuft um mit den gemerkten Logindaten rechtzeitig ein neues
anzufordern. Richtig?

Token und Logindaten würde ich vorzugsweise im Speicher der Anwendung halten, da andere Anwendungen dann
schwerer dran kommen als an eine Datei. Richtig?
Ja, so ist es.

Oder wozu bräuchte ich dann noch einen Server unter meiner Kontrolle?
Für die Anmeldung ist ein Server erforderlich, an den das Token gesendet wird.

In meiner Demo-Anwendung läuft der auf localhost. GitHub ruft also die Adresse http://localhost/oauthcallback auf. Diese sogenannte 'return_uri' Adresse habe ich bei GitHub in den OAuth Einstellungen meiner App eingetragen. Für den Echtbetrieb würde ich, falls ich tatsächlich einen Quelltextformatierer anbieten würde, die oben genannte http://beautifulsourcecode.com/oauthcallback als return_uri eintragen.



Wenn auf dem Rechner aber kein Server laufen würde, geht der HTTP Redirect ins Leere.

Um ein lebensnahes Beispiel zu verwenden: der Pizza-Bote kann die Lieferung (Token) nicht abgeben, weil ich eine falsche Adresse angegeben habe.
Michael Justin

Geändert von mjustin ( 7. Mär 2019 um 11:27 Uhr) Grund: Link zu https://tools.ietf.org/html/rfc6749#section-1.7
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#10

AW: Google API Zugriff mit OAuth 2.0 Authorization für Daraja HTTP Server (mit Source

  Alt 7. Mär 2019, 18:07
Danke schon mal für die Antworten, auch wenn ich noch nicht alles ganz verstehe oder sinnvoll finde.

Wenn ich eine VCL/FMX App schreiben wollte die diese APIs nutzt, müsste ich irgendwelche Anmeldeinformationen
(z.B. Benutzername/Passwort) an den Server schicken (wie? definiert OAuth das?) und würde wenn ich's richtig
verstanden habe ein Token bekommen, welches für einen begrenzten Zeitraum gültig ist. Richtig?
Richtig: wenn man sich per OAuth 2.0 anmelden will, zeigt dein Webbrowser eine Loginmaske und wenn Du deine Anmeldedaten sendest, erhält dein Browser einen HTTP Redirect zurück, d.h. er soll auf eine Seite gehen die der Third-Party-Anbieter bei GitHub hinterlegt hat. (Redirects werden von OAuth extensiv genutzt - siehe RFC 6749 Spezifikation)
=> Eigentlich müsste das nicht zwingend eine Webseite sein, wenn man OAuth in einer eigenen App nutzen wollte, sondern könnte ein FMX Benutzername/Passwort Formular sein,
der die Daten dann in der richtigen Form an die GitHub Webseite sendet. Allerdings müsste man dann vermutlich Änderungen an der Loginseite von GitHub nachziehen, falls diese
relevant sein sollten für den eigentlichen Login Prozess. Dann würde mann eine Redirect URL als Antwort bekommen. Aber was soll man dann auf der anderen Seite?
Ist das sozusagen die eigentliche Webanwendung die man ausführen wollte?

Dein Beispiel bringt bei mir nur die Telekom navigations Hilfeseite
Wenn ich dich weiter unten aber richtig verstehe war es eh' ein nicht wirklich umgesetztes Beispiel.

Vermutlich ist im Token vermerkt bis wann bzw. wie lange es gültig ist.

Dieses Token muss ich bei den entsprechenden Aufrufen mitschicken, sonst sagt der angefragte Server nur:
"keine Berechtigung". Richtig?

Und ich könnte aufpassen wann das Token abläuft um mit den gemerkten Logindaten rechtzeitig ein neues
anzufordern. Richtig?

Token und Logindaten würde ich vorzugsweise im Speicher der Anwendung halten, da andere Anwendungen dann
schwerer dran kommen als an eine Datei. Richtig?
Ja, so ist es.
Oder wozu bräuchte ich dann noch einen Server unter meiner Kontrolle?
Für die Anmeldung ist ein Server erforderlich, an den das Token gesendet wird.
Warum braucht es dazu einen Server? Hätte man das Token nicht einfach an den anforderer des Tokens in der HTTP Response schicken können?

In meiner Demo-Anwendung läuft der auf localhost. GitHub ruft also die Adresse http://localhost/oauthcallback auf. Diese sogenannte 'return_uri' Adresse habe ich bei GitHub in den OAuth Einstellungen meiner App eingetragen. Für den Echtbetrieb würde ich, falls ich tatsächlich einen Quelltextformatierer anbieten würde, die oben genannte http://beautifulsourcecode.com/oauthcallback als return_uri eintragen.
Dein Beispiel braucht den Server, weil der die Dienstleistung anbieten will. Wenn aber die Dienstleistung von einer App auf dem Smartphone kommt, bräuchte ja die das Token und da könnte es etwas umständlich sein einen Server aufmachen zu müssen, falls das überhaupt so geht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz