Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Authentication mit Indy Http Client (https://www.delphipraxis.net/172954-authentication-mit-indy-http-client.html)

Shark99 30. Jan 2013 09:43

Authentication mit Indy Http Client
 
Ich versuche mit diesem Code den Inhalt einer geschützen Webseite zu bekommen:
Delphi-Quellcode:
begin
  // Init request:  
  IdHttp1 := TIdHttp.Create(nil);
  try
    IdHttp1.Request.Username := 'xxx';
    IdHttp1.Request.Password := 'xxx';
       
    Result := IdHttp1.Get(URL)
   finally
    idHttp.Free;
   end;
end;
Mit Chrome/Firefox werde ich nach User/Pwd in einem Dialog gefragt und dann wird die Webseite
angezeigt.

Mit dem Indy Client bekomme ich 401 Auth Required zurück.

Was mache ich falsch? Muss ich irgendwelche Parameter setzen?

Andreas L. 30. Jan 2013 09:58

AW: Authentication mit Indy Http Client
 
Delphi-Quellcode:
  IdHTTP1.Request.BasicAuthentication := True;

Shark99 30. Jan 2013 10:01

AW: Authentication mit Indy Http Client
 
Gleiches Ergebnis. Muss ich wohl WireShark installieren. :/

Klaus01 30. Jan 2013 10:13

AW: Authentication mit Indy Http Client
 
Ereichst Du die Seite per HTTP oder HTTPS?
Grüße
Klaus

Shark99 30. Jan 2013 10:33

AW: Authentication mit Indy Http Client
 
Http, ist ein lokaler WebIf auf einer Dreambox. Habs aber auch schon mit einem Webserver getestet und bekomme da auch 401 (Chrome/Firefox gehts, also passen die Zugangsdaten). Hab das aktuelle Indy 10 von SVN (gestern normales 10.1.5x gehabt mit dem gleichen Problem).

Andreas L. 30. Jan 2013 10:43

AW: Authentication mit Indy Http Client
 
Wird das OnAuthorization-Ereignis nach dem .Get() ausgelöst?

EDIT: Du kannst auch versuchen die Login-Daten in der URL zu übergeben:
http://username:password@domain.de/xyz.html

blackfin 30. Jan 2013 10:57

AW: Authentication mit Indy Http Client
 
Hat es vielleicht etwas mit dem Charset von Username/Passwort/Url zu tun?
Soviel ich weiss, wirft Indy keine Exception, wenn die Auth fehlschlägt (401).

Probier doch mal folgendes dem Request anzufügen:
Delphi-Quellcode:
IdHTTP1.Request.Charset := 'utf-8';

Shark99 30. Jan 2013 11:08

AW: Authentication mit Indy Http Client
 
Da ich im lokalen Netzwerk teste heisst der User "admin" und das Password ist "abc123", also dürfte es mit Kodierung keine Probleme geben. Hab nun 20 Minuten lang gegoogelt und da scheinen auch andere diese Problem zu haben (und das nicht nur mit aktuellen Indy).

mjustin 30. Jan 2013 11:29

AW: Authentication mit Indy Http Client
 
Zitat:

Zitat von Shark99 (Beitrag 1201286)
Gleiches Ergebnis. Muss ich wohl WireShark installieren. :/

Es muss nicht Wireshark sein, für die HTTP Überwachung ist Fiddler einfacher in der Handhabung.

http://www.fiddler2.com/fiddler2/

mjustin 30. Jan 2013 11:34

AW: Authentication mit Indy Http Client
 
Zitat:

Zitat von Shark99 (Beitrag 1201281)

Mit Chrome/Firefox werde ich nach User/Pwd in einem Dialog gefragt und dann wird die Webseite
angezeigt.

Mit dem Indy Client bekomme ich 401 Auth Required zurück.

Was mache ich falsch? Muss ich irgendwelche Parameter setzen?

Ist es sicher HTTP Basic Auth? Es könnte auch eine Digest oder NTLM basierte Anmeldung sein.

http://de.wikipedia.org/wiki/HTTP-Au...rung#Verfahren

Sicher sagen kann man es nur anhand der Daten im Response Header, oder durch Einsatz des Debuggers.

Indy unterstützt diverse Verfahren, man muss dem Projekt dazu nur eine weitere Unit hinzufügen.

Shark99 30. Jan 2013 11:47

AW: Authentication mit Indy Http Client
 
Hast Recht! Es ist Digest. Wie verfahre ich nun?

mjustin 30. Jan 2013 11:55

AW: Authentication mit Indy Http Client
 
Zitat:

Zitat von Shark99 (Beitrag 1201311)
Hast Recht! Es ist Digest. Wie verfahre ich nun?

Dieser Thread hilft eventuell weiter:

http://forums2.atozed.com/viewtopic....20812&start=10

Shark99 30. Jan 2013 13:25

AW: Authentication mit Indy Http Client
 
Danke für den Tip, aber ich hab schon IdAllAuthentications in uses drin, und es klappt trotzdem nicht. :(

Shark99 1. Feb 2013 23:02

AW: Authentication mit Indy Http Client
 
Ich habe zwei Eventhandler hinzugefügt um besser zu erkennen was während des Connects passiert.
Delphi-Quellcode:
procedure Auth(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean);
procedure AuthSelect(Sender: TObject; var AuthenticationClass: TIdAuthenticationClass; AuthInfo: TIdHeaderList);

...

IdHTTP1.OnAuthorization := Auth;
IdHTTP1.OnSelectAuthorization := AuthSelect;
Wenn OnSelectAuthorization ausgelöst wird

ist AuthenticationClass TIdDigestAuthentication,

AuthInfo hat den Inhalt:

Digest algorithm="MD5", realm="Forbidden", qop="auth", opaque="1f4ffff678e1ac3ca5a49a44001fb374", nonce="1b2a0979d3adff70d59e1d11f6315df1"

Jedoch wird OnAuthorization erst gar nicht ausgelöst!

mjustin 2. Feb 2013 10:19

AW: Authentication mit Indy Http Client
 
Auf Stackoverflow fand ich gerade einen ähnlichen Fall.

Aus der Antwort von Remy Lebeau:

Zitat:

You need to enable the hoInProcessAuth flag in the TIdHTTP.HTTPOptions property. It is disabled by default. Without that flag, TIdHTTP.Get() will not send a second HTTP request specifying the Digest credentials in reply to the server's 401 response. It will simply exit and expect you to handle the 401 response and send a new request yourself as needed.

Shark99 2. Feb 2013 10:38

AW: Authentication mit Indy Http Client
 
Das war ein Arbeitskollege! :) Es läuft nun!


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