PureBasic
PureBasic
Azure Fetch OpenID Connect metadata document
See more OIDC Examples
Downloads the OpenID Connect self-discovery document for an Azure OIDC enabled app.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
; 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 = CkHttp::ckSetUrlVar(http,"tenant","6d8ddd66-68d1-44b0-af5c-e31b4b7ee5cd")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpNoBody(http,"GET","https://login.microsoftonline.com/{$tenant}/v2.0/.well-known/openid-configuration",resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
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."
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
; 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)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure