Sample code for 30+ languages & platforms
PureBasic

SharePoint OAuth2 Client Credentials Authentication

Demonstrates how to authenticate with OAuth 2.0 using the client credentials grant type. This is for SharePoint Online which is the cloud-based service provided by Microsoft as part of Office 365. (Users access SharePoint Online through a web browser, and the service is hosted on Microsoft's servers.)

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This 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

    ; Provide the information needed for Chilkat to automatically fetch the OAuth2.0 
    ; access token as needed.
    jsonOAuthCC.i = CkJsonObject::ckCreate()
    If jsonOAuthCC.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; --------------------------------------------------------------------------------------------------------
    ; You'll need to have registered an app in Azure beforehand.
    ; See How to Create SharePoint App Registration for OAuth 2.0 Client Credentials
    ; --------------------------------------------------------------------------------------------------------

    ; Use the values from your App Registration in Azure.
    CkJsonObject::ckUpdateString(jsonOAuthCC,"client_id","CLIENT_ID")
    CkJsonObject::ckUpdateString(jsonOAuthCC,"client_secret","SECRET_VALUE")

    ; You'll always use this scope for client credentials, because the allowed actions
    ; are determined by the App Permissions defined when you registered the app in Azure.
    CkJsonObject::ckUpdateString(jsonOAuthCC,"scope","https://graph.microsoft.com/.default")

    ; The token endpoint includes your tenant ID. 
    CkJsonObject::ckUpdateString(jsonOAuthCC,"token_endpoint","https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token")

    ; Provide the OAuth2 information. Chilkat will use this information to automatically fetch the OAuth2 access token as needed,
    CkHttp::setCkAuthToken(http, CkJsonObject::ckEmit(jsonOAuthCC))

    ; Get information about all SharePoint sites.
    sbJson.i = CkStringBuilder::ckCreate()
    If sbJson.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckQuickGetSb(http,"https://graph.microsoft.com/v1.0/sites/getAllSites",sbJson)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonOAuthCC)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    statusCode.i = CkHttp::ckLastStatus(http)

    Debug "Response status code = " + Str(statusCode)

    If statusCode <> 200
        Debug CkStringBuilder::ckGetAsString(sbJson)
        Debug "Failed."
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonOAuthCC)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    jsonResp.i = CkJsonObject::ckCreate()
    If jsonResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(jsonResp,sbJson)
    CkJsonObject::setCkEmitCompact(jsonResp, 0)

    Debug CkJsonObject::ckEmit(jsonResp)
    Debug "Success."

    ; Use this online tool to generate parsing code from sample JSON: 
    ; Generate Parsing Code from JSON


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(jsonOAuthCC)
    CkStringBuilder::ckDispose(sbJson)
    CkJsonObject::ckDispose(jsonResp)


    ProcedureReturn
EndProcedure