Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#1

Clevercomponents: AccessToken ohne Browser von Azure holen (Maschine zu Maschine)

  Alt 2. Apr 2025, 13:12
Hallöle...

Hat jemand schon mal den Modus "client_credentials" benutzt?

Hintergrund:
Holen des Tokens für weitere Verwendung ohne Browser...

Fehlermeldungen z.B.:


nur TokenURL:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt SEAM.exe ist eine Exception der Klasse EclSocketError mit der Meldung 'Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.' aufgetreten.
---------------------------
Anhalten Fortsetzen Kopieren Hilfe
---------------------------
mit TokenURL und AuthorizeURL
Zitat:
{„error“: „invalid_client“, „error_description“: „AADSTS7000215:
Ungültiges Client-Geheimnis angegeben. Stellen Sie sicher, dass es sich bei dem in der Anfrage gesendeten Geheimnis um den Wert des Clientgeheimnisses und nicht um die Clientgeheimnis-ID handelt,
für ein zur Anwendung 'xxxxxxx-79e1-401e-b0f3-xxxxxxxxx' hinzugefügtes Geheimnis. Ablaufverfolgungs-ID: 6226643b-c9ca-4f27-8720-7b551d8b1a00
Korrelations-ID: 0394fa58-10fd-4470-8d15-6cb5ec1be327 Zeitstempel: 2025-04-02 09:16:02Z“,

„error_codes":[7000215],
„timestamp„:“2025-04-02 09:16:02Z“,
„trace_id„:“6226643b-c9ca-4f27-8720-7b551d8b1a00“,
„correlation_id„:“0394fa58-10fd-4470-8d15-6cb5ec1be327“,
„error_uri": ‚https://login.microsoftonline.com/error?code=7000215‘}
Die Werte die übergebe sollten eigentlich stimmen (Copy/Paste). Ich tippe auf falsche Parameter / URL. Oder fehlt noch was?

TestCode:
Delphi-Quellcode:
conAuthorizeURL = 'https://login.microsoftonline.com/%s/oauth2/v2.0/authorize';
conTokenURL = 'https://login.microsoftonline.com/%s/oauth2/v2.0/token';
conScopes = 'https://graph.microsoft.com/.default';
...
OAuth := TclOAuth.Create(nil);
try
  OAuth.AuthUrl := Format(conAuthorizeURL, [TenantID]);
// OAuth.TokenUrl := Format(conTokenURL, [TenantID]);

   OAuth.ClientID := ClientID;
   OAuth.ClientSecret := ClientSecret;
   OAuth.Scope := conScopes;
   OAuth.AuthorizationFlow := afClientCredentialsFlow; // = 'client_credentials' oder?
   OAuth.GetAuthorization;
   Result := OAuth.Token.AccessToken;
finally
  OAuth.Free;
end;
PS: Bei Clever gibt es kein Beispiel OHNE Browser.
PS: Bitte fangt nicht an die KI zu befragen... Alle Modelle (Free und Kommerziell) philosophieren! Was sie TclOAuth für Properties/Proceduren in die Version 11 packen. Unglaublich.

falsches Beispiel:
Zitat:
procedure GetAzureToken;
var
OAuth2: TclOAuth2;
Response: TclOAuth2Response;
begin
OAuth2 := TclOAuth2.Create(nil);
try
// Set your Azure AD configuration
OAuth2.ClientID := 'your-client-id';
OAuth2.ClientSecret := 'your-client-secret';
OAuth2.AuthURL := 'https://login.microsoftonline.com/your-tenant-id/oauth2/v2.0/authorize';
OAuth2.TokenURL := 'https://login.microsoftonline.com/your-tenant-id/oauth2/v2.0/token';
OAuth2.Scope := 'https://graph.microsoft.com/.default'; // Adjust scope as needed

// For client credentials flow (service-to-service)
Response := OAuth2.GetAccessToken('client_credentials');

// OR for resource owner password flow (when you have username/password)
// Response := OAuth2.GetAccessTokenByPassword('username', 'password');

if Response.ResponseCode = 200 then
begin
ShowMessage('Token obtained: ' + Response.AccessToken);
// Store token for API calls
// You can also use Response.ExpiresIn to manage token expiration
end else
begin
ShowMessage('Error: ' + Response.ErrorMessage);
end;
finally
OAuth2.Free;
end;
end;
Miniaturansicht angehängter Grafiken
azure.jpg  

Geändert von haentschman ( 2. Apr 2025 um 13:17 Uhr)
  Mit Zitat antworten Zitat