Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle (https://www.delphipraxis.net/212281-tnethttpclient-post-fehler-beim-abrufen-des-sitzungs-handle.html)

erich.wanker 18. Jan 2023 19:57

TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle
 
Delphi 10.4 -Es geht um eine ISAPI DLL und OAuth2.0


Hallo
Ich bekomme nach einer Microsoft-Anmeldung via Redirect-Url Parameter .. diese sende ich dann an Microsoft um einen Token zu bekommen damit ich die Mailadresse des Users auslesen kann..

Code:
http := TNetHTTPClient.Create( Self );
.....
Lresponse :=  http.post(  'https://login.microsoftonline.com/organizations/oauth2/v2.0/token', params );

Das funktioniert bei mir auf einen Win10-Stand Anlone PC mit IIS und selbsterzeugten Zertifikat einwandfrei

Aber auf einem Server (in einer Domain) mit IIS 2022 NICHT (Selbst erzeugtes Zertifikat der Organisation) ...

Dort bekomme ich immer den Fehler "Fehler beim Abrufen des Sitzungs-Handle"

An was kann das liegen ???

Danke für Hinweise und Ideen
Erich



PS. Hier der ganze Schnipsel:

Delphi-Quellcode:
CallBackFrom := uniGUIApplication.UniApplication.parameters.Values[ 'oauth2callback' ];
AzureAuthCode := uniGUIApplication.UniApplication.parameters.Values[ 'code' ];
state := uniGUIApplication.UniApplication.parameters.Values[ 'state' ];
CallBackFrom := uniGUIApplication.UniApplication.parameters.Values[ 'oauth2callback' ];

      if ( CallBackFrom = 'azure' )
      then
      begin

        try
          try

            http := TNetHTTPClient.Create( Self );
            params := TStringList.Create;
            params.Add( 'code=' + UniMainModule.AzureAuthCode );
            params.Add( 'client_id=' + C_client_id_Az );
            params.Add( 'client_secret=' + C_client_secret_Az );
            params.Add( 'scope=' + C_scope_Az );
            params.Add( 'redirect_uri=' + C_redirect_uri_Az );
            params.Add( 'grant_type=authorization_code' );

            Lresponse :=  http.post(  'https://login.microsoftonline.com/organizations/oauth2/v2.0/token', params );


            if Lresponse.StatusText = 'OK'
            then
            begin
              token := GetSimpleValue( Lresponse.ContentAsString,
                'access_token' );
              GToken := stringreplace( token, '"', '', [ rfreplaceall ] );;
              Lresponse := http.get( 'https://graph.microsoft.com/v1.0/me', nil,[ TNetHeader.Create( 'Authorization', 'Bearer ' + GToken ) ] );
              if Lresponse.StatusText = 'OK'
              then
              begin
                UniMainModule.AUserName :=     stringreplace( GetSimpleValue( Lresponse.ContentAsString,'mail' ), '"', '', [ rfreplaceall ] );
                UniMainModule.LoginType := 2;
              end;

            end;

          Except
            on E : exception do
            begin
              UniMainModule.LoginType := 0;
              UniSession.Log(E.Message);
            end;
          end;

        finally
          http.Free;
          params.Free;

        end;
      end;


    function GetSimpleValue( Jstring, key : string ) : string;
      var
        jv, fv : TJSONValue;
      begin
        Result := '';
        jv := TJSonObject.ParseJSONValue( Jstring );
        fv := jv.FindValue( key );
        if fv <> nil
        then
          Result := fv.ToString;
      end;

himitsu 18. Jan 2023 20:46

AW: TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle
 
Du hast lokal vergessen das Zertifikat zu registrieren?
Wenn nicht: Wie soll es denn dann geprüft werden?

(eventuell kann man irgendwo/irgendwie die Zertifikatprüfung deaktivieren)


Und dann schonmal auf die Idee gekommen nach dieser Fehlermeldung zu suchen?

Tipp: SNetHttpClientHandleError
dann landet mal zwei Mal bei MSDN-Library durchsuchenWinHttpOpen
und dort wäre zu lesen, dass eventuell mindestens TLS 1.2 benötigt wird.

Zu alter WebServer, bzw. nicht passend konfiguriert?




Nja, einmal wird beim WinHttpOpen wieder mal nicht der Fehler komplett ausgewertet (GetLastError + SysErrorMessage),
aber hier kommen eh nur 2 Fehlercodes raus, die hier wohl nicht weiter helfen, aber dennoch wäre es sinnvoll nicht ständig unterschiedliche "Fehler" durch einen nutzlosen Fehlertext zu ersetzen. :freak:

erich.wanker 19. Jan 2023 08:19

AW: TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Danke für die Hinweise

Server ist ein Windows Server 2022 Standard - 10.0.20348

TLS 1.2 ist am Server aktiviert (laut inetcpl.cpl )
Das Zertifikat ist am Server vorhanden ( in "Trusted Root certification Authorities" / "Certificates" -> Intended Purposes: Server Authentication)

Hättest du noch eine Idee woran es liegen könnte?

Danke
Erich

himitsu 19. Jan 2023 15:07

AW: TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle
 
Zitat:

Zitat von erich.wanker (Beitrag 1517598)
Hättest du noch eine Idee woran es liegen könnte?

Da der Fehler ja offensichtlich aus dem MSDN-Library durchsuchenWinHttpOpen kommt, hatte ich gehoft er gibt mehr/bessere Fehlerinfos raus.
Die Delphi-Komponente wertet die Zusatzinfos garnicht aus (nur Fehler oder nicht).
Aber wie im MSDN-Library durchsuchenWinHttpOpen zu lesen, gibt es fast keine (dokumentierten) Fehlercodes, welche Einem wenigstens einen Hinweis geben würden. :cry:

Vielleicht kann man auf Seite des Servers, in dessen Logs, etwas finden?


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