Sample code for 30+ languages & platforms
Delphi DLL Requires Chilkat v11.0.0+

Azure OAuth2 Client Credentials Grant Flow

See more OAuth2 Examples

Demonstrates how to get an OAuth2 access token for an Azure Registered App using the Client Credentials Grant Flow.

Note: Your Azure app must be registered as a single-tenant app to use client credentials.

Chilkat Delphi DLL Downloads

Delphi DLL
var
success: Boolean;
http: HCkHttp;
req: HCkHttpRequest;
url: PWideChar;
resp: HCkHttpResponse;
statusCode: Integer;
json: HCkJsonObject;

begin
success := False;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

http := CkHttp_Create();

req := CkHttpRequest_Create();
CkHttpRequest_AddParam(req,'client_secret','CLIENT_SECRET');
CkHttpRequest_AddParam(req,'client_id','CLIENT_ID');

//  See Understanding Scopes in Azure OAuth2 Client Credentials Flow
CkHttpRequest_AddParam(req,'scope','https://graph.microsoft.com/.default');

CkHttpRequest_AddParam(req,'grant_type','client_credentials');

//  Note: Your Azure app must be registered as a single-tenant app to use client credentials.
//  Use your own tenant ID, for example 4d8fdd66-66d1-43b0-ae5c-e31b4b7de5cd
url := 'https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token';

CkHttpRequest_putHttpVerb(req,'POST');
CkHttpRequest_putContentType(req,'application/x-www-form-urlencoded');

resp := CkHttpResponse_Create();
success := CkHttp_HttpReq(http,url,req,resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

statusCode := CkHttpResponse_getStatusCode(resp);
Memo1.Lines.Add('Response status code = ' + IntToStr(statusCode));

json := CkJsonObject_Create();
CkJsonObject_Load(json,CkHttpResponse__bodyStr(resp));

CkJsonObject_putEmitCompact(json,False);
Memo1.Lines.Add(CkJsonObject__emit(json));

//  Sample successful output:

//  {
//    "token_type": "Bearer",
//    "expires_in": 3599,
//    "ext_expires_in": 3599,
//    "access_token": "eyJ0eX...K0jOERg"
//  }

if (statusCode = 200) then
  begin
    CkJsonObject_WriteFile(json,'qa_data/tokens/azureClientCredentialsToken.json');
    Memo1.Lines.Add('Success.');
  end
else
  begin
    Memo1.Lines.Add('Failed.');
  end;

CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkHttpResponse_Dispose(resp);
CkJsonObject_Dispose(json);