Einzelnen Beitrag anzeigen

Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
461 Beiträge
 
Delphi XE4 Professional
 
#1

TNetHTTPClient.post -> Fehler beim Abrufen des Sitzungs-Handle

  Alt 18. Jan 2023, 20:57
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;
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \
  Mit Zitat antworten Zitat