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

OneLogin OIDC - Get Discovery Document (OpenID Connect)

See more OneLogin OIDC Examples

Downloads the OpenID Connect self-discovery document for a OneLogin OIDC enabled app.

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.Http,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  resp: THttpResponse;
  jsonResponse: TJsonObject;
  authorization_endpoint: string;
  claims_parameter_supported: Boolean;
  issuer: string;
  jwks_uri: string;
  request_parameter_supported: Boolean;
  request_uri_parameter_supported: Boolean;
  token_endpoint: string;
  userinfo_endpoint: string;
  introspection_endpoint: string;
  revocation_endpoint: string;
  i: Integer;
  count_i: Integer;
  strVal: string;

begin
  success := False;

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

  http := THttp.Create;

  http.Accept := 'application/json';

  resp := THttpResponse.Create;
  success := http.HttpNoBody('GET','https://<account>.onelogin.com/oidc/.well-known/openid-configuration',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('Response Status Code: ' + resp.StatusCode);

  jsonResponse := TJsonObject.Create;
  jsonResponse.Load(resp.BodyStr);
  jsonResponse.EmitCompact := False;
  WriteLn(jsonResponse.Emit());

  if (resp.StatusCode <> 200) then
    begin
      WriteLn('Failed.');
      Exit;
    end;

  //  Sample output...
  //  (See the parsing code below..)
  //  
  //  Use the this online tool to generate parsing code from sample JSON: 
  //  Generate Parsing Code from JSON

  //  {
  //    "acr_values_supported": [
  //      "onelogin:nist:level:1:re-auth"
  //    ],
  //    "authorization_endpoint": "https://chilkat-dev.onelogin.com/oidc/auth",
  //    "claims_parameter_supported": true,
  //    "claims_supported": [
  //      "acr",
  //      "auth_time",
  //      "company",
  //      "custom_fields",
  //      "department",
  //      "email",
  //      "family_name",
  //      "given_name",
  //      "groups",
  //      "iss",
  //      "locale_code",
  //      "name",
  //      "params",
  //      "phone_number",
  //      "preferred_username",
  //      "sid",
  //      "sub",
  //      "title",
  //      "updated_at"
  //    ],
  //    "grant_types_supported": [
  //      "authorization_code",
  //      "implicit",
  //      "refresh_token",
  //      "client_credentials",
  //      "password"
  //    ],
  //    "id_token_signing_alg_values_supported": [
  //      "RS256"
  //    ],
  //    "issuer": "https://openid-connect.onelogin.com/oidc",
  //    "jwks_uri": "https://chilkat-dev.onelogin.com/oidc/certs",
  //    "request_parameter_supported": false,
  //    "request_uri_parameter_supported": false,
  //    "response_modes_supported": [
  //      "form_post",
  //      "fragment",
  //      "query"
  //    ],
  //    "response_types_supported": [
  //      "code",
  //      "id_token token",
  //      "id_token"
  //    ],
  //    "scopes_supported": [
  //      "openid",
  //      "name",
  //      "profile",
  //      "groups",
  //      "email",
  //      "params",
  //      "phone"
  //    ],
  //    "subject_types_supported": [
  //      "public"
  //    ],
  //    "token_endpoint": "https://chilkat-dev.onelogin.com/oidc/token",
  //    "token_endpoint_auth_methods_supported": [
  //      "client_secret_basic",
  //      "client_secret_post",
  //      "none"
  //    ],
  //    "userinfo_endpoint": "https://chilkat-dev.onelogin.com/oidc/me",
  //    "userinfo_signing_alg_values_supported": [
  //    ],
  //    "code_challenge_methods_supported": [
  //      "S256"
  //    ],
  //    "introspection_endpoint": "https://chilkat-dev.onelogin.com/oidc/token/introspection",
  //    "introspection_endpoint_auth_methods_supported": [
  //      "client_secret_basic",
  //      "client_secret_post",
  //      "none"
  //    ],
  //    "revocation_endpoint": "https://chilkat-dev.onelogin.com/oidc/token/revocation",
  //    "revocation_endpoint_auth_methods_supported": [
  //      "client_secret_basic",
  //      "client_secret_post",
  //      "none"
  //    ],
  //    "claim_types_supported": [
  //      "normal"
  //    ]
  //  }
  //  

  authorization_endpoint := jsonResponse.StringOf('authorization_endpoint');
  claims_parameter_supported := jsonResponse.BoolOf('claims_parameter_supported');
  issuer := jsonResponse.StringOf('issuer');
  jwks_uri := jsonResponse.StringOf('jwks_uri');
  request_parameter_supported := jsonResponse.BoolOf('request_parameter_supported');
  request_uri_parameter_supported := jsonResponse.BoolOf('request_uri_parameter_supported');
  token_endpoint := jsonResponse.StringOf('token_endpoint');
  userinfo_endpoint := jsonResponse.StringOf('userinfo_endpoint');
  introspection_endpoint := jsonResponse.StringOf('introspection_endpoint');
  revocation_endpoint := jsonResponse.StringOf('revocation_endpoint');
  i := 0;
  count_i := jsonResponse.SizeOfArray('acr_values_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('acr_values_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('claims_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('claims_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('grant_types_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('grant_types_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('id_token_signing_alg_values_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('id_token_signing_alg_values_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('response_modes_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('response_modes_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('response_types_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('response_types_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('scopes_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('scopes_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('subject_types_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('subject_types_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('token_endpoint_auth_methods_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('token_endpoint_auth_methods_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('userinfo_signing_alg_values_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('code_challenge_methods_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('code_challenge_methods_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('introspection_endpoint_auth_methods_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('introspection_endpoint_auth_methods_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('revocation_endpoint_auth_methods_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('revocation_endpoint_auth_methods_supported[i]');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('claim_types_supported');
  while i < count_i do
    begin
      jsonResponse.I := i;
      strVal := jsonResponse.StringOf('claim_types_supported[i]');
      i := i + 1;
    end;



  http.Free;
  resp.Free;
  jsonResponse.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.