Sample code for 30+ languages & platforms
AutoIt

Duo Auth API - Preauth

See more Duo Auth MFA Examples

The /preauth endpoint determines whether a user is authorized to log in, and (if so) returns the user's available authentication factors.

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.

Local $sIntegrationKey = "DIMS3V5QDVG9J9ABRXC4"
Local $secretKey = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab"

$oHttp = ObjCreate("Chilkat.Http")

$oHttp.Accept = "application/json"

; Use your own hostname here:
Local $sUrl = "https://api-a03782e1.duosecurity.com/auth/v2/preauth"

$oHttp.Login = $sIntegrationKey
$oHttp.Password = $secretKey

$oReq = ObjCreate("Chilkat.HttpRequest")
$oReq.AddParam "username","matt"

$oReq.HttpVerb = "POST"
$oReq.ContentType = "application/x-www-form-urlencoded"

$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpReq($sUrl,$oReq,$oResp)
If ($bSuccess = False) Then
    ConsoleWrite($oHttp.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("status code = " & $oResp.StatusCode & @CRLF)

$oJson = ObjCreate("Chilkat.JsonObject")
$bSuccess = $oJson.Load($oResp.BodyStr)
$oJson.EmitCompact = False
ConsoleWrite($oJson.Emit() & @CRLF)

; Sample successful output:

; status code = 200

; {
;   "response": {
;     "devices": [
;       {
;         "capabilities": [
;           "auto",
;           "push",
;           "sms",
;           "mobile_otp"
;         ],
;         "device": "DP6GYVTQ5NK82BMR851F",
;         "display_name": "iOS (XXX-XXX-1871)",
;         "name": "",
;         "number": "XXX-XXX-1871",
;         "type": "phone"
;       }
;     ],
;     "result": "auth",
;     "status_msg": "Account is active"
;   },
;   "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

Local $sDevice
Local $sDisplay_name
Local $sName
Local $sNumber
Local $sV_type
Local $iJ
Local $iCount_j
Local $strVal

Local $sResponseResult = $oJson.StringOf("response.result")
Local $sResponseStatus_msg = $oJson.StringOf("response.status_msg")
Local $stat = $oJson.StringOf("stat")
Local $i = 0
Local $iCount_i = $oJson.SizeOfArray("response.devices")
While $i < $iCount_i
    $oJson.I = $i
    $sDevice = $oJson.StringOf("response.devices[i].device")
    $sDisplay_name = $oJson.StringOf("response.devices[i].display_name")
    $sName = $oJson.StringOf("response.devices[i].name")
    $sNumber = $oJson.StringOf("response.devices[i].number")
    $sV_type = $oJson.StringOf("response.devices[i].type")
    $iJ = 0
    $iCount_j = $oJson.SizeOfArray("response.devices[i].capabilities")
    While $iJ < $iCount_j
        $oJson.J = $iJ
        $strVal = $oJson.StringOf("response.devices[i].capabilities[j]")
        $iJ = $iJ + 1
    Wend
    $i = $i + 1
Wend