Einzelnen Beitrag anzeigen

carmeloconny

Registriert seit: 20. Okt 2019
9 Beiträge
 
#3

AW: DelphiXE8 and WSDL, disable authentication via Smart Card Reader

  Alt 20. Okt 2019, 18:57
Hello and welcome in the DP!

If i understand you right, the smart card reader is separate and have nothing to do with the web service where you communicate with via WSDL.
But, if you try to start the authentication process for the web service then is also the smart card reader reacting?
Where is the web service running? On the same PC?
What kind of web service is it?
thank you for answering. (excuse my bad english)
WSDL is a state ministerial service for the Italian national health service.
The WS requires authentication: Authentication base = 'User : Password'

When the certified card is not inserted, everything works fine.
When the Card Certificate is inserted in the Smart card reader of the PC,
during the authentication of the WS a window opens and wants the PIN of the certified card, which does not center with the authentication of the WS, this thing slows down the communication and a waste of time.

with the procedure I wrote before, using HTTPrio component works fine.
When the system has a smart card with a certificate, HTTPrio, who uses WinInet.dll (windows), starts the card request window of the card. Which I don't want!
The certificate in the authentication header must be only: User and Password.
I tried to close:
CertCloseStore (hMemoryStore, CERT_CLOSE_STORE_FORCE_FLAG)
I tried:
InternetSetOption(Data, INTERNET_OPTION_SECURITY_FLAGS, @aFlags, aFlagsSize)
Without success.

this step in the SOAPtrans.pas file is repeated twice. on the second step the card reading starts.
first step: RetVal = ERROR_INTERNET_FORCE_RETRY;
second step: RetVal = ERROR_SUCCESS;
Delphi-Quellcode:
 { line 1151 of soap.SOAPHTTPtrans.pas  Posting Data Event }
      if Assigned(FOnPostingData) then
        FOnPostingData(DatStr.Size, BuffSize);

      RetVal := ERROR_SUCCESS;
{$IFDEF UNICODE}
      HttpSendRequest(Request, nil, 0,
                      DatStr.Bytes, DatStr.Size);
{$ELSE}
      HttpSendRequest(Request, nil, 0,
                      @DatStr.DataString[1],
                      Length(DatStr.DataString));
{$ENDIF}
      RetVal := HandleWinInetError(GetLastError, Request, True);

      case RetVal of
        ERROR_SUCCESS: break;
        ERROR_CANCELLED: System.SysUtils.Abort;
        ERROR_INTERNET_FORCE_RETRY: {Retry the operation};
      end;

Geändert von carmeloconny (20. Okt 2019 um 19:14 Uhr)
  Mit Zitat antworten Zitat