Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   REST-API - Überstellung X-Authorization Token (https://www.delphipraxis.net/203906-rest-api-ueberstellung-x-authorization-token.html)

lowmax_5 5. Apr 2020 23:13

REST-API - Überstellung X-Authorization Token
 
Hallo,

ich habe für eine REST-API mit Login und Passwort ein Token angefordert. Dieses funktioniert einwandfrei.

Nun soll laut Doku für jeden Zugriff auf die API dieser Token wie folgt überstellt werden:

Code:
X-Authorization: Token <your-personal-access-token>
Wie mache ich das mit RestClient? Ich hatte schon diverses versucht, bekomme aber immer ein 401 unauthorized.

hhcm 6. Apr 2020 08:19

AW: REST-API - Überstellung X-Authorization Token
 
Zitat:

Zitat von lowmax_5 (Beitrag 1461355)
Ich hatte schon diverses versucht..

Was denn z.B?

Client.SetHTTPHeader sollte reichen

Rollo62 6. Apr 2020 10:09

AW: REST-API - Überstellung X-Authorization Token
 
Oder so ?
https://stackoverflow.com/questions/...in-trestclient

lowmax_5 6. Apr 2020 11:37

AW: REST-API - Überstellung X-Authorization Token
 
Code:
RESTClient.SetHTTPHeader('X-Authorization: Token',token);
und

Code:
RestClient.AddParameter('X-Authorization: Token',token, TRESTRequestParameterKind.pkHTTPHEADER)
;

führt leider immer noch zu einer 401. kann es am Syntax liegen?
Ich hatte schon
Code:
RESTClient.SetHTTPHeader('X-Authorization: ','Token ' + token);
probiert, aber mit dem gleichen Resultat.

hhcm 6. Apr 2020 11:46

AW: REST-API - Überstellung X-Authorization Token
 
Ich tippe mal auf

Delphi-Quellcode:
RESTClient.SetHTTPHeader('X-Authorization: Token ',token);

Uwe Raabe 6. Apr 2020 11:49

AW: REST-API - Überstellung X-Authorization Token
 
Probier mal
Code:
RestClient.AddAuthParameter('X-Auth-Token',token, TRESTRequestParameterKind.pkHTTPHEADER);

lowmax_5 6. Apr 2020 13:04

AW: REST-API - Überstellung X-Authorization Token
 
Code:
RESTClient.SetHTTPHeader('X-Authorization: Token ',token);
=> 401

Code:
RestClient.AddAuthParameter('X-Auth-Token',token, TRESTRequestParameterKind.pkHTTPHEADER);
=> 401

Bbommel 6. Apr 2020 13:13

AW: REST-API - Überstellung X-Authorization Token
 
Ich werfe mal

Delphi-Quellcode:
RestClient.AddAuthParameter('X-Authorization','Token '+token, TRESTRequestParameterKind.pkHTTPHEADER);

in diese lustige Raterunde. :-)

Nachtrag:
Wenn man schaut, wie es in der Unit Rest.Authenticator.OAuth gemacht wird, könnte sich [TRESTRequestParameterOption.poDoNotEncode] als vierter Parameter noch lohnen, also:

Delphi-Quellcode:
RestClient.AddAuthParameter('X-Authorization','Token '+token, TRESTRequestParameterKind.pkHTTPHEADER,[TRESTRequestParameterOption.poDoNotEncode]);

hhcm 6. Apr 2020 14:30

AW: REST-API - Überstellung X-Authorization Token
 
Um welche API handelt es sich denn?

Also wenn ich mal nach

Code:
X-Authorization: Token <your-personal-access-token>
Google, finde ich nur die VRM API. In dieser steht aber nach dem Login

Code:
X-Authorization: Bearer {token}
Das oben genannte Token wird nur bei "personal access token" genutzt.

lowmax_5 6. Apr 2020 15:01

AW: REST-API - Überstellung X-Authorization Token
 
Code:
RestClient.AddAuthParameter('X-Authorization','Token '+token, TRESTRequestParameterKind.pkHTTPHEADER)
; ==> 401

Code:
RestClient.AddAuthParameter('X-Authorization','Token '+token, TRESTRequestParameterKind.pkHTTPHEADER,[TRESTRequestParameterOption.poDoNotEncode]);
==> 401

Zitat:

Um welche API handelt es sich denn
Ja, um diese handelt es sich:

https://docs.victronenergy.com/vrmapi/overview.html

Mit dem Bearer hatte ich es auch versucht, aber ebenso ohne erfolg

Uwe Raabe 6. Apr 2020 15:05

AW: REST-API - Überstellung X-Authorization Token
 
Und wie bist du an das Token gekommen?

lowmax_5 6. Apr 2020 15:14

AW: REST-API - Überstellung X-Authorization Token
 
Ermittlung des Tokens erfolgt laut Doku wie folgt:

POST https://vrmapi.victronenergy.com/v2/auth/login

{
"username": "john@example.com",
"password": "secret-passw0rd"
}

und gibt mir den Token und die idUser zurück.

hhcm 6. Apr 2020 15:26

AW: REST-API - Überstellung X-Authorization Token
 
Jetzt hampeln wir seit einer Seite über "X-Authorization: Token <your-personal-access-token>"
Laut Doku ist das falsch. WIE hast du "X-Authorization: Bearer {token}" versucht?

Uwe Raabe 6. Apr 2020 15:34

AW: REST-API - Überstellung X-Authorization Token
 
OK, dann würde ich mal dies probieren:

Delphi-Quellcode:
RestClient.AddAuthParameter('X-Authorization','Bearer '+token, TRESTRequestParameterKind.pkHTTPHEADER);

lowmax_5 6. Apr 2020 15:36

AW: REST-API - Überstellung X-Authorization Token
 
Mit

Code:
RESTClient.SetHTTPHeader('X-Authorization: Bearer ',token);
und

Code:
RestClient.AddAuthParameter('X-Authorization: Bearer',token, TRESTRequestParameterKind.pkHTTPHEADER);
und

Code:
RestClient.AddAuthParameter('X-Authorization','Bearer '+token, TRESTRequestParameterKind.pkHTTPHEADER);
jeweils immer 401

Rolf Frei 6. Apr 2020 15:51

AW: REST-API - Überstellung X-Authorization Token
 
Ist da der "X-Authorization" Header wirklich richtig? Müsste das nicht der normale "Authorization" Header sein? Hast du das schon mal versucht?

Versuch auch mal das Token Base64 encoded zu übergeben?
X-Authorization Bearer {base64 encoded Token}

Die Doku ist da leider schon sehr mangelhaft.

hhcm 6. Apr 2020 16:12

AW: REST-API - Überstellung X-Authorization Token
 
Kommt denn beim request nur ein 401 oder gibts da auch im response noch Info´s?

Ich würde erst mal Delphi bei Seite legen und Tools wie curl oder postman nutzen.
Tritt der Fehler da auch auf?

jfheins 6. Apr 2020 16:45

AW: REST-API - Überstellung X-Authorization Token
 
Kannst du irgendwie nicht nur den Response code auswerten (401) sondern gucken, was wirklich gesendet wird?

Da gibt es Tools, wie z.B. Fiddler, die die jeden HTTP Request mitloggen. Dann kannst du gucken was dein Programm wirklich sendet und ob es mit dem übereinstimmt, was es senden sollte. So Trial&Error ist doch doof ;-)

Rollo62 6. Apr 2020 17:21

AW: REST-API - Überstellung X-Authorization Token
 
Hast Du mal den RestDebugger ausprobiert, geht es damit ?
Oder mit anderen REST-Tools ?

lowmax_5 6. Apr 2020 23:01

AW: REST-API - Überstellung X-Authorization Token
 
Das ist sicherlich keine schlechte Idee, das ganze mal ohne Delphi zu testen.

Ich habe nun mal mit Postman ein Authorization 'Bearer Token' abgesetzt und bekomme folgende Rückmeldung

{
"success": false,
"errors": "Login required",
"error_code": "invalid_credentials"
}

Auch andere scheinen ein ähnliches Problem zu haben:
https://community.victronenergy.com/...error-401.html

Nachtrag1:
Mit Postman hat es nun zumindest schon mal geklappt::-D Jipee!
Unter Headers einen Key mit 'X-Authorization' anlegen + in die Value Bearer + Leerzeichen + Token

Nachtrag2:
:evil: Arghhhhhhhhhh!!! Der Token hatte Quotes.... :oops: ==> AnsiDequotedStr

Nachtrag3:
Nun hätte es mit Delphi ja auch funktionieren sollen:


Code:
RESTClient.SetHTTPHeader('X-Authorization','Bearer ' +  token);
oder
Code:
RESTRequest.Params.AddHeader('X-Authorization', 'Bearer ' + token);
Code:
oder
RestClient2.AddAuthParameter('X-Authorization','Bearer ' + token, TRESTRequestParameterKind.pkHTTPHEADER);
Das funktioniert nun leider nicht. Was mache ich da noch falsch?

hoika 7. Apr 2020 04:09

AW: REST-API - Überstellung X-Authorization Token
 
Hallo,
der Doppelpunkt fehlt?
Und der Bearer Token gehört in geschweifte Klammern?

TiGü 7. Apr 2020 06:29

AW: REST-API - Überstellung X-Authorization Token
 
Bitte schaue dir wie von jfheins vorgeschlagen das kostenlose Telrik Fiddler an.
Das klinkt sich in die Kommunikation ein und du siehst den Request von Postman und von deinen Programm im Vergleich.
Oft ist es nur ein Leerzeichen oder ein fehlendes DoNotEncode auf der Delphi-Seite.
Ist auch ganz simpel zu bedienen.
https://www.youtube.com/playlist?lis...FG7CntDTErjbHc

lowmax_5 8. Apr 2020 15:33

AW: REST-API - Überstellung X-Authorization Token
 
Lösung gefunden! Keine Verschlüsselung brachte den Erfolg bei diesem Syntax. :thumb:

Code:
  RestClient.AddAuthParameter('X-Authorization','Bearer ' + token, TRESTRequestParameterKind.pkHTTPHEADER,[TRESTRequestParameterOption.poDoNotEncode]);
Vielen Dank an alle!!!


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