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;