Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Azure Fetch OpenID Connect metadata documentSee more OIDC ExamplesDownloads the OpenID Connect self-discovery document for an Azure OIDC enabled app. For more information, see https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc
IncludeFile "CkHttpResponse.pb" IncludeFile "CkHttp.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttp::setCkAccept(http, "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. success.i = CkHttp::ckSetUrlVar(http,"tenant","6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd") resp.i = CkHttp::ckQuickRequest(http,"GET","https://login.microsoftonline.com/{$tenant}/v2.0/.well-known/openid-configuration") If CkHttp::ckLastMethodSuccess(http) <> 1 Debug CkHttp::ckLastErrorText(http) CkHttp::ckDispose(http) ProcedureReturn EndIf Debug "Response Status Code: " + Str(CkHttpResponse::ckStatusCode(resp)) json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp)) CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(json) If CkHttpResponse::ckStatusCode(resp) <> 200 Debug "Failed." CkHttpResponse::ckDispose(resp) CkHttp::ckDispose(http) CkJsonObject::ckDispose(json) ProcedureReturn EndIf CkHttpResponse::ckDispose(resp) ; 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" ; } strVal.s token_endpoint.s = CkJsonObject::ckStringOf(json,"token_endpoint") jwks_uri.s = CkJsonObject::ckStringOf(json,"jwks_uri") issuer.s = CkJsonObject::ckStringOf(json,"issuer") request_uri_parameter_supported.i = CkJsonObject::ckBoolOf(json,"request_uri_parameter_supported") userinfo_endpoint.s = CkJsonObject::ckStringOf(json,"userinfo_endpoint") authorization_endpoint.s = CkJsonObject::ckStringOf(json,"authorization_endpoint") device_authorization_endpoint.s = CkJsonObject::ckStringOf(json,"device_authorization_endpoint") http_logout_supported.i = CkJsonObject::ckBoolOf(json,"http_logout_supported") frontchannel_logout_supported.i = CkJsonObject::ckBoolOf(json,"frontchannel_logout_supported") end_session_endpoint.s = CkJsonObject::ckStringOf(json,"end_session_endpoint") kerberos_endpoint.s = CkJsonObject::ckStringOf(json,"kerberos_endpoint") tenant_region_scope.s = CkJsonObject::ckStringOf(json,"tenant_region_scope") cloud_instance_name.s = CkJsonObject::ckStringOf(json,"cloud_instance_name") cloud_graph_host_name.s = CkJsonObject::ckStringOf(json,"cloud_graph_host_name") msgraph_host.s = CkJsonObject::ckStringOf(json,"msgraph_host") rbac_url.s = CkJsonObject::ckStringOf(json,"rbac_url") i.i = 0 count_i.i = CkJsonObject::ckSizeOfArray(json,"token_endpoint_auth_methods_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"token_endpoint_auth_methods_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"response_modes_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"response_modes_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"subject_types_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"subject_types_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"id_token_signing_alg_values_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"id_token_signing_alg_values_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"response_types_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"response_types_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"scopes_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"scopes_supported[i]") i = i + 1 Wend i = 0 count_i = CkJsonObject::ckSizeOfArray(json,"claims_supported") While i < count_i CkJsonObject::setCkI(json, i) strVal = CkJsonObject::ckStringOf(json,"claims_supported[i]") i = i + 1 Wend CkHttp::ckDispose(http) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.