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

Azure Fetch OpenID Connect metadata document

See more OIDC Examples

Downloads the OpenID Connect self-discovery document for an Azure OIDC enabled app.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  final http = CkHttp();

  http.accept = 'application/json';

  // See the Microsoft Azure OIDC documentation at https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc
  // The "tenant" can take one of four values described in the documentation at the link above.

  http.setUrlVar('tenant', '6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd');
  final resp = CkHttpResponse();
  try {
    http.httpNoBody('GET', 'https://login.microsoftonline.com/{\$tenant}/v2.0/.well-known/openid-configuration', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Response Status Code: ${resp.statusCode}');

  final json = CkJsonObject();
  json.load(resp.bodyStr);
  json.emitCompact = false;
  print(json.emit());

  if (resp.statusCode != 200) {
    print('Failed.');
    return;
  }

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

  // {
  //   "token_endpoint": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/oauth2/v2.0/token",
  //   "token_endpoint_auth_methods_supported": [
  //     "client_secret_post",
  //     "private_key_jwt",
  //     "client_secret_basic"
  //   ],
  //   "jwks_uri": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/discovery/v2.0/keys",
  //   "response_modes_supported": [
  //     "query",
  //     "fragment",
  //     "form_post"
  //   ],
  //   "subject_types_supported": [
  //     "pairwise"
  //   ],
  //   "id_token_signing_alg_values_supported": [
  //     "RS256"
  //   ],
  //   "response_types_supported": [
  //     "code",
  //     "id_token",
  //     "code id_token",
  //     "id_token token"
  //   ],
  //   "scopes_supported": [
  //     "openid",
  //     "profile",
  //     "email",
  //     "offline_access"
  //   ],
  //   "issuer": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/v2.0",
  //   "request_uri_parameter_supported": false,
  //   "userinfo_endpoint": "https://graph.microsoft.com/oidc/userinfo",
  //   "authorization_endpoint": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/oauth2/v2.0/authorize",
  //   "device_authorization_endpoint": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/oauth2/v2.0/devicecode",
  //   "http_logout_supported": true,
  //   "frontchannel_logout_supported": true,
  //   "end_session_endpoint": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/oauth2/v2.0/logout",
  //   "claims_supported": [
  //     "sub",
  //     "iss",
  //     "cloud_instance_name",
  //     "cloud_instance_host_name",
  //     "cloud_graph_host_name",
  //     "msgraph_host",
  //     "aud",
  //     "exp",
  //     "iat",
  //     "auth_time",
  //     "acr",
  //     "nonce",
  //     "preferred_username",
  //     "name",
  //     "tid",
  //     "ver",
  //     "at_hash",
  //     "c_hash",
  //     "email"
  //   ],
  //   "kerberos_endpoint": "https://login.microsoftonline.com/6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd/kerberos",
  //   "tenant_region_scope": "NA",
  //   "cloud_instance_name": "microsoftonline.com",
  //   "cloud_graph_host_name": "graph.windows.net",
  //   "msgraph_host": "graph.microsoft.com",
  //   "rbac_url": "https://pas.windows.net"
  // }

  var strVal = '';

  final tokenEndpoint = json.stringOf('token_endpoint');
  final jwksUri = json.stringOf('jwks_uri');
  final issuer = json.stringOf('issuer');
  final userinfoEndpoint = json.stringOf('userinfo_endpoint');
  final authorizationEndpoint = json.stringOf('authorization_endpoint');
  final deviceAuthorizationEndpoint = json.stringOf('device_authorization_endpoint');
  final endSessionEndpoint = json.stringOf('end_session_endpoint');
  final kerberosEndpoint = json.stringOf('kerberos_endpoint');
  final tenantRegionScope = json.stringOf('tenant_region_scope');
  final cloudInstanceName = json.stringOf('cloud_instance_name');
  final cloudGraphHostName = json.stringOf('cloud_graph_host_name');
  final msgraphHost = json.stringOf('msgraph_host');
  final rbacUrl = json.stringOf('rbac_url');
  var i = 0;
  var countI = json.sizeOfArray('token_endpoint_auth_methods_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('token_endpoint_auth_methods_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('response_modes_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('response_modes_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('subject_types_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('subject_types_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('id_token_signing_alg_values_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('id_token_signing_alg_values_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('response_types_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('response_types_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('scopes_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('scopes_supported[i]');
    i++;
  }

  i = 0;
  countI = json.sizeOfArray('claims_supported');
  while (i < countI) {
    json.i = i;
    strVal = json.stringOf('claims_supported[i]');
    i++;
  }
}