PureBasic
PureBasic
Azure REST API Access Token
See more Azure OAuth2 Examples
Demonstrates how to request an Azure REST API OAUTH2 access token.Note: In order to access resources a Service Principal needs to be created in your Tenant. It is really convenient to do it via AZ CLI:
az ad sp create-for-rbac --name [APP_NAME] --password [CLIENT_SECRET]
Chilkat PureBasic Downloads
IncludeFile "CkRest.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.
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; URL: https://login.microsoftonline.com/TENANT_ID/oauth2/token
bTls.i = 1
port.i = 443
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"login.microsoftonline.com",port,bTls,bAutoReconnect)
If success <> 1
Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
; Add query params to the request.
CkRest::ckAddQueryParam(rest,"grant_type","client_credentials")
CkRest::ckAddQueryParam(rest,"client_id","APP_ID")
CkRest::ckAddQueryParam(rest,"client_secret","CLIENT_SECRET")
; Note: The resource must match the API for which you're using the access token..
CkRest::ckAddQueryParam(rest,"resource","https://management.azure.com/")
strResponseBody.s = CkRest::ckFullRequestFormUrlEncoded(rest,"POST","/TENANT_ID/oauth2/token")
If CkRest::ckLastMethodSuccess(rest) <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
respStatusCode.i = CkRest::ckResponseStatusCode(rest)
If respStatusCode >= 400
Debug "Response Status Code = " + Str(respStatusCode)
Debug "Response Header:"
Debug CkRest::ckResponseHeader(rest)
Debug "Response Body:"
Debug strResponseBody
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(json,strResponseBody)
CkJsonObject::setCkEmitCompact(json, 0)
Debug CkJsonObject::ckEmit(json)
; The result is an access token such as the following:
; {
; "token_type": "Bearer",
; "expires_in": "3600",
; "ext_expires_in": "3600",
; "expires_on": "1557864616",
; "not_before": "1557860716",
; "resource": "https://management.azure.com/",
; "access_token": "eyJ0eXAiOiJKV1QiL ... 20UFDDOHEyUg"
; }
; We'll save this JSON to a file for other examples to use..
CkJsonObject::ckWriteFile(json,"qa_data/tokens/azureToken.json")
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure