Einzelnen Beitrag anzeigen

dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

HTTP Basic Authentication bei SOAP

  Alt 12. Dez 2009, 14:18
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
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

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
Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat