Delphi DLL
Delphi DLL
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 Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, HttpRequest, HttpResponse, JsonObject;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
integrationKey: PWideChar;
secretKey: PWideChar;
http: HCkHttp;
url: PWideChar;
req: HCkHttpRequest;
resp: HCkHttpResponse;
json: HCkJsonObject;
device: PWideChar;
display_name: PWideChar;
name: PWideChar;
number: PWideChar;
v_type: PWideChar;
j: Integer;
count_j: Integer;
strVal: PWideChar;
responseResult: PWideChar;
responseStatus_msg: PWideChar;
stat: PWideChar;
i: Integer;
count_i: Integer;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
integrationKey := 'DIMS3V5QDVG9J9ABRXC4';
secretKey := 'HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab';
http := CkHttp_Create();
CkHttp_putAccept(http,'application/json');
// Use your own hostname here:
url := 'https://api-a03782e1.duosecurity.com/auth/v2/preauth';
CkHttp_putLogin(http,integrationKey);
CkHttp_putPassword(http,secretKey);
req := CkHttpRequest_Create();
CkHttpRequest_AddParam(req,'username','matt');
CkHttpRequest_putHttpVerb(req,'POST');
CkHttpRequest_putContentType(req,'application/x-www-form-urlencoded');
resp := CkHttpResponse_Create();
success := CkHttp_HttpReq(http,url,req,resp);
if (success = False) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(http));
Exit;
end;
Memo1.Lines.Add('status code = ' + IntToStr(CkHttpResponse_getStatusCode(resp)));
json := CkJsonObject_Create();
success := CkJsonObject_Load(json,CkHttpResponse__bodyStr(resp));
CkJsonObject_putEmitCompact(json,False);
Memo1.Lines.Add(CkJsonObject__emit(json));
// 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
responseResult := CkJsonObject__stringOf(json,'response.result');
responseStatus_msg := CkJsonObject__stringOf(json,'response.status_msg');
stat := CkJsonObject__stringOf(json,'stat');
i := 0;
count_i := CkJsonObject_SizeOfArray(json,'response.devices');
while i < count_i do
begin
CkJsonObject_putI(json,i);
device := CkJsonObject__stringOf(json,'response.devices[i].device');
display_name := CkJsonObject__stringOf(json,'response.devices[i].display_name');
name := CkJsonObject__stringOf(json,'response.devices[i].name');
number := CkJsonObject__stringOf(json,'response.devices[i].number');
v_type := CkJsonObject__stringOf(json,'response.devices[i].type');
j := 0;
count_j := CkJsonObject_SizeOfArray(json,'response.devices[i].capabilities');
while j < count_j do
begin
CkJsonObject_putJ(json,j);
strVal := CkJsonObject__stringOf(json,'response.devices[i].capabilities[j]');
j := j + 1;
end;
i := i + 1;
end;
CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkHttpResponse_Dispose(resp);
CkJsonObject_Dispose(json);
end;