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
(PowerShell) 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
Add-Type -Path "C:\chilkat\ChilkatDotNet47-9.5.0-x64\ChilkatDotNet47.dll" # This example assumes the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $integrationKey = "DIMS3V5QDVG9J9ABRXC4" $secretKey = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab" $http = New-Object Chilkat.Http $http.Accept = "application/json" # Use your own hostname here: $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. $http.Login = $integrationKey $http.Password = $secretKey $req = New-Object Chilkat.HttpRequest $req.AddParam("username","matt") $req.AddParam("factor","push") # The device ID can be obtained from the preauth response. See Duo Preauth Example $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. $req.AddParam("async","1") $resp = $http.PostUrlEncoded($url,$req) if ($http.LastMethodSuccess -eq $false) { $($http.LastErrorText) exit } $("status code = " + $resp.StatusCode) $json = New-Object Chilkat.JsonObject $success = $json.Load($resp.BodyStr) $json.EmitCompact = $false $($json.Emit()) if ($resp.StatusCode -ne 200) { exit } # Sample successful output: # status code = 200 # { # "stat": "OK", # "response": { # "txid": "45f7c92b-f45f-4862-8545-e0f58e78075a" # } # } $txid = $json.StringOf("response.txid") # Use your own hostname here: $sbUrl = New-Object Chilkat.StringBuilder $sbUrl.Append("https://api-a03782e1.duosecurity.com/auth/v2/auth_status?txid=") $sbUrl.Append($txid) $("Auth status URL: " + $sbUrl.GetAsString()) $sbResult = New-Object Chilkat.StringBuilder # Wait for a response... $i = 0 $maxWaitIterations = 100 while ($i -lt $maxWaitIterations) { # Wait 3 seconds. $http.SleepMs(3000) $("Polling...") $resp = $http.QuickRequest("GET",$sbUrl.GetAsString()) if ($http.LastMethodSuccess -eq $false) { $($http.LastErrorText) exit } if ($resp.StatusCode -ne 200) { $("error status code = " + $resp.StatusCode) $($resp.BodyStr) $("Failed.") exit } # Sample response: # { # "stat": "OK", # "response": { # "result": "waiting", # "status": "pushed", # "status_msg": "Pushed a login request to your phone..." # } # } $json.Load($resp.BodyStr) # The responseResult can be "allow", "deny", or "waiting" $sbResult.Clear() $json.StringOfSb("response.result",$sbResult) $responseStatus = $json.StringOf("response.status") $responseStatus_msg = $json.StringOf("response.status_msg") $($sbResult.GetAsString()) $($responseStatus) $($responseStatus_msg) $("") if ($sbResult.ContentsEqual("waiting",$true) -eq $true) { $i = $i + 1 } else { # Force loop exit.. $i = $maxWaitIterations } } $("Finished.") |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.