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
(Perl) 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
use chilkat(); # This example assumes the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $integrationKey = "DIMS3V5QDVG9J9ABRXC4"; $secretKey = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab"; $http = chilkat::CkHttp->new(); $http->put_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->put_Login($integrationKey); $http->put_Password($secretKey); $req = chilkat::CkHttpRequest->new(); $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 is a HttpResponse $resp = $http->PostUrlEncoded($url,$req); if ($http->get_LastMethodSuccess() == 0) { print $http->lastErrorText() . "\r\n"; exit; } print "status code = " . $resp->get_StatusCode() . "\r\n"; $json = chilkat::CkJsonObject->new(); $success = $json->Load($resp->bodyStr()); $json->put_EmitCompact(0); print $json->emit() . "\r\n"; if ($resp->get_StatusCode() != 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 = chilkat::CkStringBuilder->new(); $sbUrl->Append("https://api-a03782e1.duosecurity.com/auth/v2/auth_status?txid="); $sbUrl->Append($txid); print "Auth status URL: " . $sbUrl->getAsString() . "\r\n"; $sbResult = chilkat::CkStringBuilder->new(); # Wait for a response... $i = 0; $maxWaitIterations = 100; while ($i < $maxWaitIterations) { # Wait 3 seconds. $http->SleepMs(3000); print "Polling..." . "\r\n"; # resp is a HttpResponse $resp = $http->QuickRequest("GET",$sbUrl->getAsString()); if ($http->get_LastMethodSuccess() == 0) { print $http->lastErrorText() . "\r\n"; exit; } if ($resp->get_StatusCode() != 200) { print "error status code = " . $resp->get_StatusCode() . "\r\n"; print $resp->bodyStr() . "\r\n"; print "Failed." . "\r\n"; 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"); print $sbResult->getAsString() . "\r\n"; print $responseStatus . "\r\n"; print $responseStatus_msg . "\r\n"; print "" . "\r\n"; if ($sbResult->ContentsEqual("waiting",1) == 1) { $i = $i + 1; } else { # Force loop exit.. $i = $maxWaitIterations; } } print "Finished." . "\r\n"; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.