Sample code for 30+ languages & platforms
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

PureBasic
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