Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TOAuth2Authenticator - Anforderung eines neuen AccessTokens (https://www.delphipraxis.net/202377-toauth2authenticator-anforderung-eines-neuen-accesstokens.html)

lowmax_5 28. Okt 2019 13:24

TOAuth2Authenticator - Anforderung eines neuen AccessTokens
 
Mit der Komponente TOAuth2Authenticator konnte ich erfolgreich ein AccessToken anfordern.
Dieses hat entsprechend ein AccessTokenExpiry. Wenn dieses abgelaufen ist, kann eine Verbindung mehr herstellt werden. Ich möchte daher ein aktuelles AccessToken anfordern.

Dazu verwendet ich

Code:
  OAuth2Authenticator1.AuthCode := fAccessToken;

  OAuth2Authenticator1.ClientID := ClientId;
  OAuth2Authenticator1.ClientSecret := ClientSecret;
  OAuth2Authenticator1.RedirectionEndpoint := 'http://127.0.0.1';

  OAuth2Authenticator1.ChangeAuthCodeToAccesToken;
Ich bekomme hierbei jedoch immer nur folgende Meldung:

Zitat:

EIdURIException ' Protokollfeld ist leer'
verwende ich die Funktion der Komponente Configure 'Autorisieren' bekomme ich ein neues AccxessToken und eine aktuelle AccessTokenExpiry.

Was mache ich Falsch? Die Doku zu 'ChangeAuthCodeToAccesToken' ist etwas unterdurchschnittlich...



Delphi 10.2.2

Bbommel 28. Okt 2019 13:37

AW: TOAuth2Authenticator - Anforderung eines neuen AccessTokens
 
Du nutzt die falsche Funktion. Je nach genauer Implementierung von OAuth2 bekommst du bei der Anmeldung zunächst ein "Authorisierungstoken". Dieses Auth-Token muss dann in einem weiteren Schritt gegen das eigentliche Access-Token umgetauscht werden. Genau dafür ist die von dir aufgerufene ChangeAuthCodeToAccesToken eigentlich gedacht und/oder sie muss entsprechend implentiert werden.

Was du hier laut deinem Code aber versuchst: du versuchst das alte Access-Token (jedenfalls nehme ich an, dass das in fAccessToken steht) mit dieser Funktion in ein neues Access-Token umzutauschen. Das wird nicht funktionieren, denn dafür ist diese Funktion und die zugehörige API nicht da.

Oftmals gibt es bei OAuth2 ein Refresh-Token. Das ist genau dafür da, um mit ihm ohne neue Benutzer-Anmeldung im Hintergrund ein neues Access-Token abzufragen. Das Refresh-Token sollte auch im TOAuth2Authenticator gespeichert sein, wenn ich mich recht entsinne. Die API, wie man ein RefreshToken in ein neues AccessToken umtauschen kann, sollte von deinem Auth-Anbieter dokumentiert sein und die müsstest du dann ggf. noch implentieren.

lowmax_5 28. Okt 2019 21:39

AW: TOAuth2Authenticator - Anforderung eines neuen AccessTokens
 
Vielen Dank für die ausführliche Antwort und die Beschreibung des Prozessflows. Wenn ich Dich richtig verstehe, ist die oAuth2-Komponente noch nicht 'Vollständig' und muss auf den jeweiligen Anwendungsfall/API dann noch angepasst werden.

Bbommel 29. Okt 2019 07:15

AW: TOAuth2Authenticator - Anforderung eines neuen AccessTokens
 
Genau. Da OAuth2 kein ganz exaktes Protokoll vorgibt und sich die Anbieter da im Detail unterscheiden können, muss man einiges in einer Anbieter-spezifischen Ableitung der Klasse selbst umsetzen.

So sagt es auch die Delphi-Hilfe:
====
Implementiert eine grundlegende OAuth2-Authentifizierung.

TOAuth2Authenticator implementiert eine grundlegende OAuth2-Authentifizierung.TOAuth2Authenticator bietet eine minimale Unterstützung und stellt die Infrastruktur gemäß des Workflows des Dienstanbieters bereit.

Leiten Sie von dieser Klasse eigene ab, um spezifische Authentifikatorklassen für bestimmte Dienstanbieter zu erstellen.
====
(http://docwiki.embarcadero.com/Libra...2Authenticator)


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