Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api (https://www.delphipraxis.net/212730-delphi-11-3-aenderung-im-oauth2-microsoft-graph-api.html)

oakley 22. Mär 2023 18:31

Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hallo zusammen,

hat sich irgendwas in der OAuth2 Komponente in Delphi 11.3 geändert?
Ich bekomme einen Auth Code und will damit meinen Token abrufen.
Der Code wird in der Variablen FAuthCode gespeichert.

Ich verwende folgenden Code:

Delphi-Quellcode:
  LClient := TRestClient.Create(OA.AccessTokenEndpoint);
  try
    LCLient.Authenticator := OA;
    LClient.BaseURL := 'https://login.microsoftonline.com/07a9e2f0-5a0e-406c-a7ff-7b3ab1976b0e/oauth2/v2.0/token';
    LRequest := TRESTRequest.Create(LClient);
    LRequest.Method := TRESTRequestMethod.rmPOST;

    LRequest.AddAuthParameter('client_id', OA.ClientID, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('scope', OA.scope, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('code', FAuthCode, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('redirect_uri', OA.RedirectionEndpoint, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('grant_type', 'authorization_code', TRESTRequestParameterKind.pkREQUESTBODY);

    LRequest.Execute;

    if LRequest.Response.GetSimpleValue('access_token', LToken) then
      FAccessToken := LToken;

    if LRequest.Response.GetSimpleValue('refresh_token', LToken) then
      FRefreshToken := LToken;

    if LRequest.Response.GetSimpleValue('token_type', LToken) then
      FTokenType := OAuth2TokenTypeFromString(LToken);

    if LRequest.Response.GetSimpleValue('expires_in', LToken) then
    begin
      LIntValue := StrToIntdef(LToken, -1);
      if (LIntValue > -1) then
        FAccessTokenExpiry := IncSecond(Now, LIntValue)
      else
        FAccessTokenExpiry := 0.0;
    end;
    if (FAccessToken <> '') then FAuthCode := '';

    OA.AccessToken := FAccessToken;
    OA.RefreshToken := FRefreshToken;
  finally
    LClient.DisposeOf;
  end;
Ich bekomme allerdings unter Delphi 11.3 einen 400 BadRequest. Wenn ich das gleiche Programm in 11.2 kompiliere läuft es einwandfrei durch.

LG

Mirko

Union 22. Mär 2023 19:09

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
OA ist was? TOAuth2Authenticator?

oakley 22. Mär 2023 19:16

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Ja genau TOAuth2Authenticator.

LG

Mirko

Union 22. Mär 2023 19:16

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Wo wird der Wert für response_type gesetzt? Und was ist der Fehlercode (error) der mit der 400er Response geliefert wird? Z.b.;

AADSTS900561: The endpoint only accepts POST, OPTIONS requests. Received a GET request.

oakley 22. Mär 2023 19:26

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Den response_type habe ich hier gar nicht definiert, hat aber bis jetzt einwandfrei funktioniert.
Ich muss morgen nochmal nach dem 400er Fehler schauen, ich habe hier nur Version 11.2 installiert.

LG

Mirko

Union 22. Mär 2023 19:28

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hier steht, dass dieser Parameter zwingend angegeben werden muss. Der Artikel ist vom Januar dieses Jahres.

oakley 22. Mär 2023 19:33

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Ja bei der Anfrage für den Auth Code mache ich das auch. Ich habe eine ähnliche URL wie die auf der Seite und auch response_type=code .
Der Fehler tritt bei der Anfrage zum Access Token auf.

LG

Mirko

shebang 23. Mär 2023 07:25

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hier steht, dass du beim Token Refresh den Paramater refresh_token statt code übergeben musst.

oakley 23. Mär 2023 08:26

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
An der Stelle wo die Webanmeldung kommt muss es code sein, denn ich brauche einen Auth Code, den ich in einen Access_Token und einen Refresh_Token umwandeln kann.

Es kommt unter 11.3 auch kein 400er Fehler wie ich gerade gesehen habe sondern einfach die Meldung: "OAUTH2-Anmeldung ist nicht ordnungsgemäß eingerichet" .
Was bedeutet das?

LG

Mirko

Union 23. Mär 2023 08:28

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Woher kommt die Meldung? Vom Microsoft Server in der response, von Delphi oder woher sonst? Und ist das die vollständige Fehlermeldung?

oakley 23. Mär 2023 08:36

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Ja das ist die vollständige Fehlermeldung. Mehr bekomme ich im Debug auch nicht.
Das Kommt an der Stelle LRequest.Execute. Pkl

Delphi-Quellcode:
    LCLient.Authenticator := OA;
    LClient.BaseURL := 'https://login.microsoftonline.com/07a9e2f0-5a0e-406c-a7ff-7b3ab1976b0e/oauth2/v2.0/token';
    LCLient.SynchronizedEvents := false;
    LRequest := TRESTRequest.Create(LClient);
    LRequest.Method := TRESTRequestMethod.rmPOST;

    LRequest.AddAuthParameter('client_id', OA.ClientID, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('scope', OA.scope, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('code', FAuthCode, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('redirect_uri', OA.RedirectionEndpoint, TRESTRequestParameterKind.pkREQUESTBODY);
    LRequest.AddAuthParameter('grant_type', 'authorization_code', TRESTRequestParameterKind.pkREQUESTBODY);

    LRequest.Execute; <- Hier kommt der Fehler
Kann sein, dass das von Microsoft kommt. Wie gesagt ich habe es gestern Abend in 11.2 versucht und da lief es einwandfrei.
Vorhin einfach kompiliert ohne Änderungen in 11.3 und da kam direkt der Fehler.

Der AuthCode wird auch vergeben das ist nicht das Problem.

Die Base URL ist ja https://... , ich habe im LClient aber nirgendwo die Nutzung von SSL oder TLS angegeben.
Kann es daran liegen?

LG

Mirko

Union 23. Mär 2023 08:59

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Eigentlich nicht, da der RestClient nicht auf den Indy basiert sondern die jeweilige OS Funktionalität der Plattform nutzt.

Bbommel 23. Mär 2023 09:20

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Vielleicht ein Hinweis dazu: Emba hat in 11.3 die REST-API im Zusammenspiel mit Microsoft Graph/OData kaputtgemacht (RSP-40726, RSP-40757). Da die Antwort beim OAuth2 selbst auch als JSON kommt und hier ja auch die RestRequest-Komponenten genutzt werden, könnte es sein, dass der Fehler hier auch schon zuschlägt.

oakley 23. Mär 2023 09:29

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Ja sehr geil und ich fummel hier rum. Danke für die Info. Dann wieder zurück zu 11.2 .

Edit: Zurück auf 11.2 Probleme mit dem TMS Pack. Interner Fehler URW8074 .

LG

Mirko

juergen 23. Mär 2023 16:21

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Update rückwärts, siehe hier.

Edit: Falls jemand das in Zukunft hier liest

oakley 26. Apr 2023 13:57

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hallo zusammen,

sollte mit dem 11.3 Patch 1 das Problem nicht eigentlich behoben sein?
Also ich habe folgendes gemacht:

Keine Testprogramm das mit dem obigen Code anmeldet und einen Token bekommt einmal unter Delphi 11.2 auf einer VM laufen lassen und einmal auf einer 11.3.

Die 11.2 macht alles wie gewünscht, loggt ein und ich kann abfragen starten.
Die 11.3 zeigt mit bei Anfrage des Tokens: Oauth2 ist nicht richtig eingerichtet .
In Wirklichkeit steckt ein Bad Request dahinter, den ich als Fehler vom MS Graph API Endpoint zurück bekomme.

Ich habe jetzt versucht das Verzeichnis C:\Program Files (x86)\Embarcadero\Studio\22.0\source\data\rest aus der 11.2 in die 11.3 zu kopieren (altes Verzeichnis vorher umbenannt).
Leider ohne Erfolg, ich bekomme immer noch den selben Fehler.

LG

Mirko

TurboMagic 26. Apr 2023 17:45

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hast du schon mal in QP https://quality.embarcadero.com geschaut,
ob das irgendwie bekannt ist? Ist zes möglich das in ein einfachstes Testprogramm zu packen und falls noch nicht
gemeldet dort zusammen mit dem Testprogramm zu melden? Report Nummer hier posten, falls du's meldest, nicht vergessen! ;-)

Grüße
TurboMagic

Uwe Raabe 26. Apr 2023 22:54

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Zitat:

Zitat von oakley (Beitrag 1521570)
Ich habe jetzt versucht das Verzeichnis C:\Program Files (x86)\Embarcadero\Studio\22.0\source\data\rest aus der 11.2 in die 11.3 zu kopieren (altes Verzeichnis vorher umbenannt).
Leider ohne Erfolg, ich bekomme immer noch den selben Fehler.

Da diese Sourcen lediglich als Referenz gedacht sind und für die Compilierung gar nicht herangezogen werden, ist das nicht verwunderlich.

oakley 27. Apr 2023 10:11

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hallo Uwe,

Du hattest mal irgendwo geschrieben, dass man aus der 11.2 Dateien in die 11.3 kopieren kann um das Problem zu lösen.
Oder war das was anderes?

LG

Mirko

Bbommel 27. Apr 2023 10:59

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Hm, ich habe gerade mal mein Programm mit D11.3 Patch 1 getestet und über eine Microsoft-REST-API sowohl ein OAuth2-Token abgefragt und damit dann auch die eigentliche API genutzt. Hat alles problemlos funktioniert - der Fehler an sich in der Delphi-Bibliothek scheint mir also korrigiert zu sein (ohne mir jetzt aus Zeitgründen die Sourcen von Delphi nochmal angesehen zu haben).

Insofern wird der Fehler bei dir irgendwo anders liegen.

Was Uwe meinte: du müsstest die betroffenen Bibliotheken von D11.2, die noch funktionieren, in dein Projektverzeichnis kopieren. Dann werden diese benutzt anstelle der originalen Bibliotheken von D11.3. Dazu wäre es natürlich ideal, wenn du rausfinden würdest, wo genau der Fehler in den Delphi-Bibliotheken verursacht wird, um die passende dann auszutauschen.

Mich selbst macht etwas misstrauisch, dass es bei mir funktioniert. Insofern wäre es ja spannend, mal genauer zu schauen, was der Fehler ist. Im Response ist normalerweise auch bei einem Fehler 400 noch ein JSON mit weiteren Infos zum Fehler.

oakley 27. Apr 2023 16:32

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Ich habe jetzt die Dateien REST.Authenticator.OAuth.pas, REST.Authenticator.OAuth.WebForm.Win.pas und REST.Authenticator.OAuth.WebForm.Win.dfm ins Projektverzeichnis kopiert und sofort funktioniert die Token Anfrage.

lowmax_5 28. Mär 2024 08:45

AW: Delphi 11.3 Änderung im OAuth2 Microsoft Graph Api
 
Kann es sein, das das Problem mit D12 Patch1 wieder rein gekommen ist?
nachdem ich die besagten Dateien in das Projektverzeichnis kopiere ist unter D12 P1 der gleiche Fehler weg.

Ich wollte noch eine Ergänzung in https://quality.embarcadero.com schreiben, aber das ist ja nur noch ReadOnly.
RSP-40757


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