PureBasic
PureBasic
Duo Auth API - Auth
See more Duo Auth MFA Examples
The /auth endpoint performs second-factor authentication for a user by sending a push notification to the user's smartphone app, verifying a passcode, or placing a phone call. It is also used to send the user a new batch of passcodes via SMS.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
integrationKey.s = "DIMS3V5QDVG9J9ABRXC4"
secretKey.s = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab"
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttp::setCkAccept(http, "application/json")
; Use your own hostname here:
url.s = "https://api-a03782e1.duosecurity.com/auth/v2/auth"
; This example requires Chilkat v9.5.0.89 or greater because Chilkat will automatically
; generate and send the HMAC signature for the requires based on the integration key and secret key.
CkHttp::setCkLogin(http, integrationKey)
CkHttp::setCkPassword(http, secretKey)
req.i = CkHttpRequest::ckCreate()
If req.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::ckAddParam(req,"username","matt")
CkHttpRequest::ckAddParam(req,"factor","push")
; The device ID can be obtained from the preauth response. See Duo Preauth Example
CkHttpRequest::ckAddParam(req,"device","DP6GYVTQ5NK82BMR851F")
CkHttpRequest::setCkHttpVerb(req, "POST")
CkHttpRequest::setCkContentType(req, "application/x-www-form-urlencoded")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpReq(http,url,req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
Debug "status code = " + Str(CkHttpResponse::ckStatusCode(resp))
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))
CkJsonObject::setCkEmitCompact(json, 0)
Debug CkJsonObject::ckEmit(json)
; Sample successful output:
; status code = 200
; {
; "response": {
; "result": "allow",
; "status": "allow",
; "status_msg": "Success. Logging you in..."
; },
; "stat": "OK"
; }
; Sample code to parse the above JSON response..
; Use this online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
responseResult.s = CkJsonObject::ckStringOf(json,"response.result")
responseStatus.s = CkJsonObject::ckStringOf(json,"response.status")
responseStatus_msg.s = CkJsonObject::ckStringOf(json,"response.status_msg")
stat.s = CkJsonObject::ckStringOf(json,"stat")
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure