Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerBuilder) Duo Auth API - Async AuthSee more Duo Auth MFA ExamplesIf you enable async, then your application will be able to retrieve real-time status updates from the authentication process, rather than receiving no information until the process is complete. Note: This example requires Chilkat v9.5.0.89 or greater. For more information, see https://duo.com/docs/authapi#/auth_status
integer li_rc string ls_IntegrationKey string ls_SecretKey oleobject loo_Http string ls_Url oleobject loo_Req oleobject loo_Resp oleobject loo_Json integer li_Success string ls_Txid oleobject loo_SbUrl oleobject loo_SbResult string ls_ResponseStatus string ls_ResponseStatus_msg integer i integer li_MaxWaitIterations // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. ls_IntegrationKey = "DIMS3V5QDVG9J9ABRXC4" ls_SecretKey = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab" loo_Http = create oleobject // Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 li_rc = loo_Http.ConnectToNewObject("Chilkat.Http") if li_rc < 0 then destroy loo_Http MessageBox("Error","Connecting to COM object failed") return end if loo_Http.Accept = "application/json" // Use your own hostname here: ls_Url = "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. loo_Http.Login = ls_IntegrationKey loo_Http.Password = ls_SecretKey loo_Req = create oleobject // Use "Chilkat_9_5_0.HttpRequest" for versions of Chilkat < 10.0.0 li_rc = loo_Req.ConnectToNewObject("Chilkat.HttpRequest") loo_Req.AddParam("username","matt") loo_Req.AddParam("factor","push") // The device ID can be obtained from the preauth response. See Duo Preauth Example loo_Req.AddParam("device","DP6GYVTQ5NK82BMR851F") // Add the async param to get an immediate response, then periodically check for updates to find out when the MFA authentication completes for fails. loo_Req.AddParam("async","1") loo_Resp = loo_Http.PostUrlEncoded(ls_Url,loo_Req) if loo_Http.LastMethodSuccess = 0 then Write-Debug loo_Http.LastErrorText destroy loo_Http destroy loo_Req return end if Write-Debug "status code = " + string(loo_Resp.StatusCode) loo_Json = create oleobject // Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject") li_Success = loo_Json.Load(loo_Resp.BodyStr) loo_Json.EmitCompact = 0 Write-Debug loo_Json.Emit() if loo_Resp.StatusCode <> 200 then destroy loo_Resp destroy loo_Http destroy loo_Req destroy loo_Json return end if // Sample successful output: // status code = 200 // { // "stat": "OK", // "response": { // "txid": "45f7c92b-f45f-4862-8545-e0f58e78075a" // } // } ls_Txid = loo_Json.StringOf("response.txid") destroy loo_Resp // Use your own hostname here: loo_SbUrl = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_SbUrl.ConnectToNewObject("Chilkat.StringBuilder") loo_SbUrl.Append("https://api-a03782e1.duosecurity.com/auth/v2/auth_status?txid=") loo_SbUrl.Append(ls_Txid) Write-Debug "Auth status URL: " + loo_SbUrl.GetAsString() loo_SbResult = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_SbResult.ConnectToNewObject("Chilkat.StringBuilder") // Wait for a response... i = 0 li_MaxWaitIterations = 100 do while i < li_MaxWaitIterations // Wait 3 seconds. loo_Http.SleepMs(3000) Write-Debug "Polling..." loo_Resp = loo_Http.QuickRequest("GET",loo_SbUrl.GetAsString()) if loo_Http.LastMethodSuccess = 0 then Write-Debug loo_Http.LastErrorText destroy loo_Http destroy loo_Req destroy loo_Json destroy loo_SbUrl destroy loo_SbResult return end if if loo_Resp.StatusCode <> 200 then Write-Debug "error status code = " + string(loo_Resp.StatusCode) Write-Debug loo_Resp.BodyStr Write-Debug "Failed." destroy loo_Resp destroy loo_Http destroy loo_Req destroy loo_Json destroy loo_SbUrl destroy loo_SbResult return end if // Sample response: // { // "stat": "OK", // "response": { // "result": "waiting", // "status": "pushed", // "status_msg": "Pushed a login request to your phone..." // } // } loo_Json.Load(loo_Resp.BodyStr) // The responseResult can be "allow", "deny", or "waiting" loo_SbResult.Clear() loo_Json.StringOfSb("response.result",loo_SbResult) ls_ResponseStatus = loo_Json.StringOf("response.status") ls_ResponseStatus_msg = loo_Json.StringOf("response.status_msg") Write-Debug loo_SbResult.GetAsString() Write-Debug ls_ResponseStatus Write-Debug ls_ResponseStatus_msg Write-Debug "" destroy loo_Resp if loo_SbResult.ContentsEqual("waiting",1) = 1 then i = i + 1 else // Force loop exit.. i = li_MaxWaitIterations end if loop Write-Debug "Finished." destroy loo_Http destroy loo_Req destroy loo_Json destroy loo_SbUrl destroy loo_SbResult |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.