Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.017 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Ios App Microsoft Graph Api Passwort speichern

  Alt 21. Sep 2025, 11:58
Aus Sicherheitsgründen würde ich bei einem Client der delegated auth nutzt die Verwendung eines Client Secretes vermeiden (dieses sollte nur serverseitig bekannt sein) und auch einen anderen response_mode verwenden.

Hier ist ein Ausschnitt aus einer Web-Anwendung für Entra ID, die PKCE und form_post verwendet.

Bei response_mode=form_post ist das access_token nicht im Browser-Speicher auslesbar. PKCE - "Proof of Key Code Exchange" - ist eine Erweiterung des OAuth 2.0 Protokolls die gegen code interception attacks hilft.

Delphi-Quellcode:
procedure TAuthFilter.DoFilter(Context: TdjServerContext; Request: TdjRequest;
  Response: TdjResponse; const Chain: IWebFilterChain);
var
  CodeVerifier: string;
  CodeChallenge: string;
  AccessToken: string;
  State: string;
begin
  AccessToken := Request.Session.Content.Values['access_token'];
  if AccessToken = 'then
  begin
    CodeVerifier := Copy(CreateGUIDString, 2, 12);
    Response.Session.Content.Values['CodeVerifier'] := CodeVerifier;

    CodeChallenge := BuildCodeChallenge(CodeVerifier);

    State := CreateGUIDString;
    Response.Session.Content.Values['state'] := State;
    Response.Redirect(AuthorizeEndpoint
     + '?client_id=' + ClientID // Your app registration's Application (client) ID
     + '&response_type=code'             // Request an auth code
     + '&redirect_uri=' + RedirectURI
     + '&scope=openid offline_access'    // Request offline access
     + '&response_mode=form_post'
     + '&state=' + State
     + '&code_challenge=' + CodeChallenge
     + '&code_challenge_method=S256');
  end else begin
    Chain.DoFilter(Context, Request, Response); // pass
  end;
end;
Der gezeigte Code ist aus der Unit https://github.com/michaelJustin/dar...n/MainUnit.pas
Michael Justin

Geändert von mjustin (21. Sep 2025 um 12:52 Uhr) Grund: URL korrigiert
  Mit Zitat antworten Zitat