Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTTP Basic Authentication bei SOAP (https://www.delphipraxis.net/144627-http-basic-authentication-bei-soap.html)

dominikkv 12. Dez 2009 14:18


HTTP Basic Authentication bei SOAP
 
Hallo,

beim Zugriff auf eine API (Webservice) wird eine HTTP Basic Authentication über SSL benötigt.

Hier ein Ausschnitt aus einem mitgelieferten Beispiel in PHP:
Code:
  require_once('SOAP/Client.php');
  $client = new SOAP_client('https://a.b.domain.net/namespace/');
 
  // Protocol version must be HTTP 1.1.
  $client->setOpt('curl', CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 
  // curl comes with a number of predefined certifiers it recognizes. We use Thawte, which is not
  // a part of this set. There should be a better way of dealing with this, see curl documentation.
  // we here just don't verify the peer.
  $client->setOpt('curl', CURLOPT_SSL_VERIFYPEER, FALSE);
 
  // username and password
  $client->setOpt('curl', CURLOPT_USERPWD, "Benutzername:Passwort");
Sehe ich das richtig dass hier die HTTP-Version auf 1.1, der Benutzername + PW für die HTTP Basic Authentication gesetzt werden und die Überprüfung des SSL-Zertifikats ausgeschaltet wird?

Kommen wir zu meinem Versuch in Delphi :o
Ich habe über den WSDL-Import eine neue Unit erstellt. Der Aufruf sieht so aus:
Delphi-Quellcode:
var
  rio: THttpRio;

procedure TfrmMain.btnTestClick(Sender: TObject);
var
  WebService: WebServiceSoap;
begin
  rio := THTTPRIO.Create(self);
  rio.HTTPWebNode.UserName := 'Benutzername';
  rio.HTTPWebNode.Password := 'Passwort';
  rio.HTTPWebNode.OnBeforePost := self.HttpRioHttpWebNodeBeforePost;


  WebService:= GetWebServiceSoap(False, '', rio);
  mmoLog.Lines.Add(WebService.WebServiceAction('0').SqlXml);
end;

procedure TfrmMain.HttpRioHttpWebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
  Data: Pointer);
begin
   if not InternetSetOption(Data,
                      INTERNET_OPTION_HTTP_VERSION,
                      PChar('HTTP/1.1'), // stimmt das?!
                      System.Length('HTTP/1.1')) then
       ShowMessage(SysErrorMessage(GetLastError));

   if not InternetSetOption(Data,
                      INTERNET_OPTION_USERNAME,
                      PChar(rio.HTTPWebNode.UserName),
                      System.Length(rio.HTTPWebNode.UserName)) then
       ShowMessage(SysErrorMessage(GetLastError));

   if not InternetSetOption(Data,
                      INTERNET_OPTION_PASSWORD,
                      PChar(rio.HTTPWebNode.Password),
                      System.Length (rio.HTTPWebNode.Password)) then
       ShowMessage(SysErrorMessage(GetLastError));
end;
Dabei hat mir dieser Thread weitergeholfen.
Ich denke, HTTP Basic Authentication habe ich abgehackt, bei der HTTP-Version bin ich mir nicht sicher, ob ich das richtig gemacht habe. Fehlt nur noch die SSL-Zertifikat-Überprüfung-Abschaltung :mrgreen:

Jemand ne Idee, wie ich das abschalten kann?

Es kommt übrigens diese Fehlermeldung wenn ich versuche das auszuführen:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse ESOAPHTTPException mit der Meldung 'The certificate authority is invalid or incorrect - URL:https://a.b.domain.net/namespace - SOAPAction:https://a.b.domain.net/namespace/WebServiceAction' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Danke für eure Hilfe :cheers:
Dominik

dominikkv 14. Dez 2009 10:30

Re: HTTP Basic Authentication bei SOAP
 
Wenn ihr mir wenigstens sagen könntet ob ich auf dem richtigen Weg bin wäre das eine Hilfe.

Liegt es wirklich nur an SSL?
Habe ich die HTTP-Version richtig angegeben?


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