PureBasic
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
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