Delphi TidHTTP веб-сервис безопасности usernametoken - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь использовать Delphi и Indy's TIdHTTP для доступа к сайту с использованием аспекта безопасности usernametoken.

У запроса SOAP есть заголовки для типа пароля = urladdressforoasis password

Файл classnameproxy.config сервера от поставщика имеет это:

<basicHttpBinding>
    <binding name="BasicHttpBinding_ZZ_myInt">
        <security mode="TransportWithMessageCredential" />
    </binding>
</basicHttpBinding>

Поэтому я пытаюсь добавить пользовательские заголовки в TIdHTTP, используя следующий код:

idHTTP.Request.CustomHeaders.AddValue('Authorization', 'Basic ' + TIdEncoderMIME.EncodeString(string(aUserID) + ':' + string(aPWD), IndyTextEncoding_ASCII()));

Очевидно, что по какой-то причине это неверно. Я искал TIdHTTP и оазис и имя пользователя, но ничего не нашел. Может быть, я ищу неправильные ключевые слова?

Можно ли использовать TIdHTTP для доступа к веб-службам с использованием безопасного имени пользователя?

function Post_XML(aURL, aUserID, aPWD, aInputFile, aOutputFile, aContentType, aCharset, aShow: pAnsiChar):integer; stdcall;
var
  sRequest,
  sResponse : TFileStream;
  idHTTP  : TidHTTP;
  SSLHandler : TidSSLIOHandlerSocketOpenSSL;
  EnvVar  : string;
begin
  Result := 0;
  begin
    try
    begin
      sRequest := TFileStream.Create(string(aInputFile), fmOpenRead or fmShareDenyWrite);
      sResponse := TFileStream.Create(string(aOutputFile), fmCreate or fmShareDenyRead or fmOpenWrite);
    end;
    except on E: Exception do
    begin
      Result := 99;
    end;
    end;
    try
    begin
      EnvVar := '';
      EnvVar := System.SysUtils.GetEnvironmentVariable('use_a_proxy');
      SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
      SSLHandler.SSLOptions.SSLVersions := [sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
      SSLHandler.SSLOptions.Mode := sslmUnassigned;
      idHTTP := TidHTTP.Create;
      idHTTP.ConnectTimeout := 60000;
      idHTTP.ReadTimeout := 60000;
      idHTTP.HandleRedirects := True;
      idHTTP.IOHandler := SSLHandler;
      if UpperCase(EnvVar) = 'ON' then
      begin
        idHTTP.ProxyParams.ProxyServer := '127.0.0.1';
        idHTTP.ProxyParams.ProxyPort := 8888;
      end;
      idHTTP.Request.ContentType := string(aContentType);
      idHTTP.Request.CharSet := string(aCharSet);
      idhttp.Request.CustomHeaders.AddValue('SOAPAction', 'http://bustax.tntax.tn.gov/BusTaxRequest');
      if aUserid <> '' then
      begin
        idHTTP.Request.BasicAuthentication := True;
        idhttp.Request.Username := aUserid;
        idHTTP.Request.Password := aPwd;
      end;
      idHTTP.Post(trim(string(aURL)), sRequest, sResponse);
      FreeAndNil(SSLHandler);
      FreeAndNil(idHTTP);
    end;
    except
      on E: EIdHTTPProtocolException do
      begin
        ShowMessage(AnsiString('Protocol Error: ' + E.Message));
        Result := E.ErrorCode;
       end;
      on E: EIdSocketError  do
      begin
        ShowMessage(AnsiString('Socket Error: ' + E.Message));
        Result := E.LastError;
      end;
      on E: EIdException  do
      begin
        ShowMessage(AnsiString('HTTP Error: ' + E.Message));
        Result := HTTPMain.ResponseCode;
      end;
      on E: Exception  do
      begin
        ShowMessage(AnsiString('Error: ' + E.Message));
        Result := HTTPMain.ResponseCode;
      end;
    end;
    FreeAndNil(sRequest);
    FreeAndNil(sResponse);
    end;
end;
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:bus="http://bustax.tntax.tn.gov">
<soapenv:Header>
<oas:Security>
<oas:UsernameToken>
<oas:Username>myUsername</oas:Username>
<oas:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</oas:Password>
</oas:UsernameToken>
</oas:Security>
</soapenv:Header>
<soapenv:Body>
<bus:BusTaxRequest>
<bus:JurisdictionSITUS>1900</bus:JurisdictionSITUS>
<bus:TransactionId>123456</bus:TransactionId>
</bus:BusTaxRequest>
</soapenv:Body>
</soapenv:Envelope>
...