AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich
Thema durchsuchen
Ansicht
Themen-Optionen

401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

Ein Thema von Caps · begonnen am 31. Aug 2023 · letzter Beitrag vom 1. Sep 2023
Antwort Antwort
Seite 1 von 2  1 2      
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 10:54
Hallöle,

ich muss einen REST-Service mit D7 ansprechen (es muss leider D7 sein, da komme ich nicht drum herum, habe ich mir nicht ausgesucht).

Es ist keine Authentifizierung erforderlich, und mit dem Postman bekomme ich auch ein Ergebnis, jedoch mit Delphi nicht.
Ich verwende die Indy10-Komponenten.

Folgendes ist die Prozedur, mit der ich versuche den REST-Service anzusprechen:

Delphi-Quellcode:
procedure TfrmMain.btnListClick(Sender: TObject);
var
  ComObj: TWEBComm;
  IdHTTP: TIdHTTP;
  URL: String;
  AuthorizationString: String;
  Response: TStringStream;
begin
  try
    URL := 'https://<großes Geheimnis>';
    AuthorizationString := '<großes Geheimnis>';

    ComObj := TWEBComm.Create; // Interne Komponente
    IdHTTP := TIdHTTP.Create;
    Response := TStringStream.Create('');

    with ComObj do begin
      with IdHTTP do begin
        ConnectTimeout := 5000;
        ReadTimeout := 10000;
        HTTPOptions := [];
        Request.CustomHeaders.Text := 'x-token: ' + AuthorizationString;
      end;

      Create_HTTPS(IdHTTP); // Internes Gedönse
      if sConMsg = 'OKthen begin
        try
          IdHTTP.Get(URL, Response); // Hier kriege ich einen 401 Unauthorized
          memoJson.Text := Response.DataString;
        except
          on e: Exception do begin
            ShowMessage('Fehler in IdHTTP: '#13#10 + e.Message);
          end;
        end;
      end else begin // Fehler...
        ShowMessage('Fehler in ComObj: ' + sConMsg);
      end;
    end;

  finally
    FreeAndNil(Response);
    FreeAndNil(IdHTTP);
    FreeAndNil(ComObj);
  end;
end;
Ok, das ist nur ein Testprogramm, daher habe ich alles in den Click-Handler gepackt, aber das ist auch nicht das Problem.
Das interne Gedönse ist nicht das Problem, da ich beim Aufruf eines anderen Endpunktes des gleichen Servers keinen 401 kriege, sondern alles glatt läuft.

Also sorry für eventuelles Chaos.
Meine Frage lässt sich glaube ich ugf. so zusammenfassen:

Ich kann den fraglichen REST-Endpunkt mit dem Postman problemlos ansprechen - mit Delphi leider nicht. Warum?
Ich kriege im Delphi einen 401, im Postman aber nicht, und eine Authentifizierung ist am Service auch nicht erforderlich.

Das x-token in den CustomHeaders ist korrekt, im Postman wie im Delphi - daran liegt es nicht. Das wird auch nicht vom Webserver ausgewertet sondern vom dem Service dahinter - der 401 kommt aber vom Webserver.

Ich habe mal die Indy-Unit durchdebuggt, um die RawHeaders auszulesen, und da stand nur folgendes drin:
Code:
Host: api.glasmatic-services.net
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Der Postman schickt folgende Header:
Code:
Cache-Control: no-cache
Postman-Token: <calculated when request is sent>
Host: <calculated when request is sent>
User-Agent: PostmanRuntime/7.26.8
Accept: */*
Accept-Encodig: gzip, deflate, br
Connection: keep-alive
x-token: <großes Geheimnis>
Tja

Über jeden Hinweis dankbar verbleibt
Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 11:23
Ändere bitte mal den User-Agent: Mozilla/3.0 (compatible; Indy Library) in was neueres, z. B. Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0 ab, etliche Server lehnen eine Unterhaltung mit sowas "altem" ab.

Oder suche Dir hier List of User Agent Strings was passendes aus.

Der Originaluseragent von Indy aus Delphi 7 klappt eigentlich nirgendwo mehr so richtig.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#3

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 11:31
Das hat leider nicht geholfen, ich kriege den Fehler immernoch.
Was könnte es sonst noch sein?

Grüße!
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#4

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 11:39
Du nutzt HTTPS, wo wird denn der TIdSSLIOHandlerSocketOpenSSL an idHTTP.IOHandler zugewiesen? Und wie ist er konfiguriert?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#5

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 11:43
Du sagst zwar, das es angeblich nicht an dem x-token Header liegen, aber das einzige was an dem Request rein offensichtlich mit Authentication zu tun hat ist eben genau der Authentication-Token in dem Header.

Postman schickt den mit und kommt durch, bei der Ausgabe der Raw-Headers von Delphi steht der Header auch nicht drin.
Von daher würde ich jetzt zu allererst mal Fiddler als Debug-Proxy dazwischen klemmen und schauen, ob der Header a) wirklich nicht mit kommt - und nicht lediglich nur nicht ausgegeben wird - und wenn das wirklich der Fall ist dass der Header fehlt, dann b) schauen warum er fehlt und wie man in c) rein bekommt.

Oder ein noch einfacherer Gegentest: Lass den Header in Postman mal weg. Ich würde darauf setzen Du bekommst den gleichen 401er wie Delphi auch.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#6

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 11:47
Danke für die Antwort!

Test: ich habe im Postman den x-token weggelassen, kriege aber nicht den 401, sondern der Webserver akzeptiert den Request, und der dahinterliegende Service liefert eine JSON-Antwort:

Code:
{
    "error": "A token is required"
}
Grüße!
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 12:09
Macht der Postman vielleicht ein POST bzw. ist das wichtig? Viele APIs erlauben nur die jeweils richtige Methode (POST, GET, PUT, DELETE, ...)

Du machst ja ein GET:

Zitat:
IdHTTP.Get(URL, Response); // Hier kriege ich einen 401 Unauthorized
Ach ja, und das "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" akzeptiert ja auch keine JSON-Antwort mit

Möglicher Fix:
IdHTTP.Request.Accept := '*/*';
Ansgar Becker
https://www.heidisql.com
Wenn du loslässt, hast du zwei Hände frei.

Geändert von anse (31. Aug 2023 um 12:16 Uhr)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#8

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 12:15
Hallo,

nein, im Postman habe ich auch GET als Methode ausgewählt.
Content-Type JSON hatte ich früher schon, hab es nochmals ausprobiert, bringt leider keine Änderung.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#9

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 13:36
Habe gerade jemanden aus dem Urlaub geholt, der den Server debuggt.
Er sagt der Header "x-token" würde nicht übermittelt werden. Mache ich irgendwas falsch mit der Einbindung der "CustomHeaders"?
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.647 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: 401 Unauthorized - jedoch eigentlich keine Athentifizierung erforderlich

  Alt 31. Aug 2023, 14:13
Ich glaube du musst bei Indy = als Trennzeichen verwenden. Am besten verwendest du direkt AddValue.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 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