Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Get Google API Access Token using P12 Service Account Key

See more Google APIs Examples

Demonstrates how to get a Google API access token using a P12 service account key.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Pfx,
  Chilkat.AuthGoogle,
  Chilkat.Socket;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  pfx: TPfx;
  gAuth: TAuthGoogle;
  iss: string;
  scope: string;
  oauth_sub: string;
  numSec: Integer;
  tlsSock: TSocket;

begin
  success := False;

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

  //  --------------------------------------------------------------------------------
  //  For a step-by-step guide for setting up your Google Workspace service account,
  //  see Setup Google Workspace Account for Sending SMTP GMail from a Service Account
  //  --------------------------------------------------------------------------------

  //  First load the PKCS12 (.p12 / .pfx) into a PFX object.
  pfx := TPfx.Create;
  success := pfx.LoadPfxFile('qa_data/pfx/chilkat25-cbd7b42afbd8.p12','notasecret');
  if (success <> True) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  gAuth := TAuthGoogle.Create;
  success := gAuth.SetP12(pfx);

  //  The ISS is your service account email address ending in gserviceaccount.com.
  iss := 'chilkatsvc@chilkat25.iam.gserviceaccount.com';

  //  The scope is always the following string:
  scope := 'https://mail.google.com/';

  //  The sub is your company email address
  oauth_sub := 'info@chilkat.xyz';

  //  The access token is valid for this number of seconds.
  numSec := 3600;

  gAuth.EmailAddress := iss;
  gAuth.Scope := scope;
  gAuth.ExpireNumSeconds := numSec;
  gAuth.SubEmailAddress := oauth_sub;

  //  Connect to www.googleapis.com
  tlsSock := TSocket.Create;
  success := tlsSock.Connect('www.googleapis.com',443,True,5000);
  if (success <> True) then
    begin
      WriteLn(tlsSock.LastErrorText);
      Exit;
    end;

  //  Send the request to obtain the access token.
  success := gAuth.ObtainAccessToken(tlsSock);
  if (success <> True) then
    begin
      WriteLn(gAuth.LastErrorText);
      Exit;
    end;

  //  Examine the access token:
  WriteLn('Access Token: ' + gAuth.AccessToken);


  pfx.Free;
  gAuth.Free;
  tlsSock.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.