Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mirosoft Graph Api Auth Code (https://www.delphipraxis.net/204796-mirosoft-graph-api-auth-code.html)

oakley 29. Jun 2020 23:29

Mirosoft Graph Api Auth Code
 
Hallo zusammen,

ich habe folgenden Code der bei der MS Graph Api eine Anfrage bezüglich eines AuthCodes ausführen soll.
OA ist ein TOAuth2Authenticator den ich auf die Form gezogen habe.

Code:
 
  LClient := TRestClient.Create(OA.AuthorizationEndpoint);
  try
    LClient.BaseURL := 'https://login.microsoftonline.com/07a9e2f0-5a0e-406c-a7ff-7b3ab1976b0e/oauth2/v2.0/authorize';
    LRequest := TRESTRequest.Create(LClient);
    LResponse := TRESTResponse.Create(LClient);
    LRequest.Response := LResponse;
    LRequest.Method := TRESTRequestMethod.rmPOST;

    LRequest.AddAuthParameter('client_id', OA.ClientID, TRESTRequestParameterKind.pkGETorPOST);
    LRequest.AddAuthParameter('redirect_uri', OA.RedirectionEndpoint, TRESTRequestParameterKind.pkGETorPOST);
    LRequest.AddAuthParameter('response_type', 'code', TRESTRequestParameterKind.pkGETorPOST);
    LRequest.AddAuthParameter('response_mode', 'query', TRESTRequestParameterKind.pkGETorPOST);
    LRequest.AddAuthParameter('scope', OA.Scope, TRESTRequestParameterKind.pkGETorPOST);

    LRequest.Execute;

    memo1.Lines.Text := LRequest.Response.Content;
   
  finally
    LClient.DisposeOf;
  end;
Um zu sehen was ich zurück bekomme, habe ich das Ergebnis der Anfrage mal in in Memo Feld schreiben lassen.
Ich erhalte also den HTML Code der Login Seite von Microsoft. Eigentlich müsste ich die aber im Browser öffnen (bevorzugt in edge).
Edge öffne ich derzeit so:
Code:
ShellExecute(Application.Handle, 'open', PChar('cmd.exe'), PChar('/c "start microsoft-edge:http://www.google.de"'), nil, SW_SHOWNORMAL);
Weiß jemand, wie ich das anstellen kann?

LG

Mirko

Incocnito 30. Jun 2020 07:29

AW: Mirosoft Graph Api Auth Code
 
Wenn du die Authorization-Daten brauchst, musst du das dann nicht innerhalb deines Programms
(z.B. im TWebBrowser) öffnen?
Ich meine TMS hat da in deren Cloud-Pack auch ein extra Login-Fenster worüber die die
Credentials austauschen.

MfG Incocnito

Blackpit 30. Jun 2020 08:11

AW: Mirosoft Graph Api Auth Code
 
Das könnte eventuell helfen.

Gruß
BP

oakley 30. Jun 2020 12:50

AW: Mirosoft Graph Api Auth Code
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für den Input.

Wenn ich das über dieses Interface (siehe Anhang) mache öffnet er den Browser selbstständig.

Aber das kann ich zur Laufzeit nicht verwenden oder?

LG

Mirko

oakley 2. Jul 2020 16:39

AW: Mirosoft Graph Api Auth Code
 
Okay ich weiß wie ich an den AuthCode komme. Die RedirectURI von MS gibt den direkt zurück, ich kann ihn auslesen und damit einen dementsprechenden Token bekommen.
Über den TWebbrowser geht das ganze auch.

Ich baue mir also folgenden URL String zusammen:

Code:
    UrlStr := 'https://login.microsoftonline.com/{meine tenant id}/oauth2/v2.0/authorize' +
    '?client_id={meine client id}' +
    '&response_type=code' +
    '&redirect_uri={meine redirect uri}' +
    '&response_mode=query' +
    '&scope=User.Read offline_access' +
    '&state=2020';
Wie gesagt im TWebbrowser geht das, wenn ich allerdings den Edge öffnen lassen will:

Code:
ShellExecute(Application.Handle, 'open', PChar('cmd.exe'), PChar('/c "start microsoft-edge:' + URLStr + '"'), nil, SW_SHOWNORMAL); //Open link in browser
Schneidet er den URL String beim ersten & Zeichen ab.

Weiß jemand woran das liegt?

Den korrekten String in ein Memo geschrieben und dann per Copy/Paste in die Adresszeile des Edge und es läuft einwandfrei.
Ich möchte gerne den Edge verwenden, weil der mich fragt, ob ich angemeldet bleiben möchte, was der TWebbrowser nicht macht.

LG

Mirko

Blackpit 3. Jul 2020 08:10

AW: Mirosoft Graph Api Auth Code
 
Zitat:

Zitat von oakley (Beitrag 1468753)
...
Schneidet er den URL String beim ersten & Zeichen ab.
...

QuotedStr schon versucht?

oakley 3. Jul 2020 09:24

AW: Mirosoft Graph Api Auth Code
 
Okay ist erledigt.
Das Problem ist das das "&" Zeichen in der cmd.exe Konsole escaped werden muss.

Korrekt ist damit:

UrlStr := 'https://login.microsoftonline.com/{meine tenant id}/oauth2/v2.0/authorize' +
'?client_id={meine client id}' +
'^&response_type=code' +
'^&redirect_uri={meine redirect uri}' +
'^&response_mode=query' +
'^&scope=User.Read offline_access' +
'^&state=2020';

Rollo62 3. Jul 2020 09:55

AW: Mirosoft Graph Api Auth Code
 
Hilft es wenn Du aus & ein && machst ?

oakley 3. Jul 2020 10:50

AW: Mirosoft Graph Api Auth Code
 
Nein das Problem ist, das ich Edge ja als Parameter der cmd.exe starte und die Windows Konsole das & Zeichen und alles was danach folgt ignoriert.
her muss das & mit ^ escaped werden. Dann geht's.

LG

Mirko

Rolf Frei 3. Jul 2020 16:42

AW: Mirosoft Graph Api Auth Code
 
Wieso schreibst du deine Antwort nicht einfach in eine Textdatei mit der Endung .htm (oder .html) un öffnest dann diese per Shellexecute?

ShellExecute(Application.Handle, 'open', PChar('ResponseHtmlDatei.htm'), nil, nil, SW_SHOWNORMAL);

Das öffnet dir den Default Browser mit der HTML-Datei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.
Seite 1 von 2  1 2      

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