Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   OAuth2-Fenster öffnen und Redirect-Url abfangen (https://www.delphipraxis.net/208608-oauth2-fenster-oeffnen-und-redirect-url-abfangen.html)

Tobsn01 25. Aug 2021 14:54

Delphi-Version: 5

OAuth2-Fenster öffnen und Redirect-Url abfangen
 
Hallo mal wieder, liebe Delphi-Praxis :D

Und zwar wollte ich euch mal um eure Meinung fragen:

Ich habe ein Programm, das eine Api verwenden soll. Bei dieser Api muss man sich jedoch mittels

OAuth anmelden. Jedoch geht das nicht mit einer einfachen Post-Abfrage:

Man hat eine Url, welche man in einem Browserfenster öffnet. In diesem Fenster drückt man dann

einen Button, der zu einer weiteren Url weiterleitet.

Ich benötige am Ende die Url, an die der Nutzer weitergeleitet wird, da darin ein Code enthalten ist.

Ich habe mal ein bisschen rumgespielt und es bisher so umgesetzt:

Die Url wird über shellExecute mit dem Browser geöffnet, und ein IdHttpServer wird gestartet (die redirect url ist nämlich ne LocalHost url).

so kann ich nun den redirect auf meinen Server abfangen und den Code aus der Url auslesen. Das ist aber leider alles irgendwie etwas unschön.

Ich habe mich dann mal etwas erkundigt und herausgefunden, dass es ja sowas wie eine BrowserKomponente in Delphi gibt. Jetzt zu meiner

eigentlichen Frage:

Kann man obiges auch darin umsetzen, um mehr Kontrolle über den Ablauf zu erhalten? Sowas wie ein 'warte, solange noch kein redirekt stattgefunden hat',
'lese url', 'schließe browserfenster'? ^^

Damit wäre alles (irgendwie) in einer Funktion und ich müsste nicht über gewaltige Umwege den Code wieder in das Hauptprogramm einschleusen.

MFG, Tobsn

Phoenix 25. Aug 2021 15:06

AW: OAuth2-Fenster öffnen und Redirect-Url abfangen
 
Zitat:

Zitat von Tobsn01 (Beitrag 1493901)
Ich habe mich dann mal etwas erkundigt und herausgefunden, dass es ja sowas wie eine BrowserKomponente in Delphi gibt. Jetzt zu meiner

eigentlichen Frage:

Kann man obiges auch darin umsetzen, um mehr Kontrolle über den Ablauf zu erhalten? Sowas wie ein 'warte, solange noch kein redirekt stattgefunden hat',
'lese url', 'schließe browserfenster'? ^^

Siehe erst einmal meine Antwort hier: https://www.delphipraxis.net/1492957-post11.html
Kurzum: Nein. Die OAuth-Spezifikation ist da extrem eindeutig und sagt: Nimm den Default-Browser des Systems. Der IDP kann (und sollte) darüber hinaus versuchen, die Nutzung von Embedded Browsern aktiv zu verhindern.

Eine andere Lösung (ggf. elegantere Lösung) wäre, dass Du für Deine Anwendung ein custom Url-Schema registrierst. z.B.: meinProgramm://auth?code=xyz
Diese custom url trägst Du dann im IDP ein. Hat auch den Vorteil, dass Du keinen HttpListener aufmachen musst und der redirect nicht auf eine unsichere, nicht-https-Url geht.

Der Browser bekommt den redirect auf diese Url, und Windows (oder Linux oder macOS oder Android oder iOS, geht ja Plattformübergreifend) ruft dann Dein Programm mit dieser Url als Parameter auf. Die neu gestartete Instanz kann dann deiner laufenden Instanz z.B. über Shared Memory oder Named Pipes oder ähnliches eine Nachricht mit der Antwort vom IDP schicken.

generic 25. Aug 2021 15:07

AW: OAuth2-Fenster öffnen und Redirect-Url abfangen
 
Versuchst du den Code Flow einzubauen oder welche Flow möchtest du umsetzen?

https://curity.io/resources/learn/oauth-code-flow/
https://youtu.be/7D-OU4hZW70

Tobsn01 25. Aug 2021 15:38

AW: OAuth2-Fenster öffnen und Redirect-Url abfangen
 
@generic Naja ich möchte von Discord meine Testapplication automatisch laufen lassen. Dazu muss ich jedoch mich immer authentifizieren, was nur über den Browseransatz geht.

@Phoenix das hört sich nach einem sehr viel besseren Ansatz an :D Ich kenne zwar insgesamt das Prinzip dahinter, jedoch hab ich von der Umsetzung gar keine Ahnung. Gibt es irgendwo ein gutes

Nachschlagewerk? Am besten auch mit Beispielen ^^.

generic 26. Aug 2021 14:10

AW: OAuth2-Fenster öffnen und Redirect-Url abfangen
 
Kennst du diese Seite?
https://discord.com/developers/docs/topics/oauth2

Dort werden auch die Flows nochmal einzeln erwähnt.
Ich lese bei dir gerade etwas den Client Credentials Grant raus.
Aber genau könnte man es nur sagen, was du genau bauen willst.

Tobsn01 26. Aug 2021 14:26

AW: OAuth2-Fenster öffnen und Redirect-Url abfangen
 
Ja, ich hab mich in letzter Zeit etwas mit der Seite beschäftigt.

Jedoch muss ich leider sagen, ist mein Projekt in einer sehr tiefen Schublade verschwunden :D

Ich wollte eigentlich den Client, der auf dem PC läuft, steuern. Heißt sowas wie Nutzer muten oder entmuten.

Jedoch habe ich herausgefunden, dass man das eher mit einer Websocketverbindung macht, da jeder Client local einen entsprechenden hostet.

Da ich jedoch nicht wirklich herausfinden konnte, wie man sich mit delphi recht fix auf einen Websocket verbindet, hab ich das Projekt

erstmal beiseite gelegt, und steuere solange die Aktionen über Hotkeys.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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