![]() |
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:
Ich bekomme hierbei jedoch immer nur folgende Meldung:
OAuth2Authenticator1.AuthCode := fAccessToken;
OAuth2Authenticator1.ClientID := ClientId; OAuth2Authenticator1.ClientSecret := ClientSecret; OAuth2Authenticator1.RedirectionEndpoint := 'http://127.0.0.1'; OAuth2Authenticator1.ChangeAuthCodeToAccesToken; Zitat:
Was mache ich Falsch? Die Doku zu 'ChangeAuthCodeToAccesToken' ist etwas unterdurchschnittlich... Delphi 10.2.2 |
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. |
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.
|
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. ==== ( ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz