Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Indy (Delphi) Http Client and Digest Authentication

I'm trying to communicate with a LAN (http://) server that needs digest authentication.

uses IdHttp, IdAuthenticationDigest;

...

begin
  IdHttp1 := TIdHttp.Create(nil);
  try
    IdHttp1.Request.Username := 'xxx';
    IdHttp1.Request.Password := 'xxx';

    Result := IdHttp1.Get(URL)
  finally
    idHttp1.Free;
  end;
end; 

Unfortunately I get a HTTP/1.0 401 Unauthorized as IdHttp1.ResponseText from the server. Both Firefox and Chrome connect fine if I enter the username and password.

I've the latest Indy 10 from SVN and Delphi 7.

The http header of the server (192.168.1.10 on LAN):

Connecting...
Resolving hostname dm7020hd.
Connecting to 192.168.1.10.
Connected.
Server: webserver/1.0
Date: Thu, 31 Jan 2013 11:28:32 GMT
WWW-Authenticate: Digest algorithm="MD5", realm="Forbidden", qop="auth", opaque="7edfc2c756ad1f795651f15f88c32b25", nonce="d2ef913b753b3b6ad8878b34b93cfc5a"
Content-Type: text/html
Cache-Control: no-store, no-cache, must-revalidate
Expires: Sat, 10 Jan 2000 05:00:00 GMT
Content-Length: 15
Last-Modified: Thu, 31 Jan 2013 11:28:32 GMT
ETag: "753868328"
Connection: close
Disconnected

I've googled alot about this problem and apparently a lot of people have trouble with indy authentication (does it work at all?).

like image 941
Casady Avatar asked Feb 01 '13 11:02

Casady


1 Answers

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.

like image 151
Remy Lebeau Avatar answered Nov 10 '22 01:11

Remy Lebeau