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.