Adaptive Authentication API
This function did not do authentication. It does risk calculation return you the return object that is similar to normal authentication function. From there you will know whether you need to perform step-up authentication or not.
Below is the URL to access the API functions:
POST /v2/CentagateWS/webresources/auth/adaptive
Parameters
No | Parameters | Occurence | Descriptions |
---|---|---|---|
1 | username | Required | Registered Username In CENTAGATE Cloud |
2 | AuthResult | Required | Either "True" Or "False". True = Authentication Success. This Function Will Return And Inform User Whether Need Step Up Authentication Or Not. False = Authentication Failed. This Value Send Back To CENTAGATE For Indexing Statistic Purpose. |
3 | AuthToken | Optional | The Previous Generated AuthToken. |
4 | IntegrationKey | Required | Integration Key Of The App That The User Wants To Authenticate |
5 | UnixTimestamp | Required | Current Time In Unixtimestamp |
6 | SupportFido | Optional | FIDO Authentication Option, Pass True To Enable And False To Disable. Or Leave It Empty. |
7 | IpAddress | Optional | IP Address From Where The Authentication Request Is Originated. |
8 | UserAgent | Optional | Platform Information Of Authentication Request Is Made Of. |
9 | BrowserFp | Optional | Browser Fingerprint |
10 | hmac | Required | Hmac Generated From Combination (Username + AuthResult + UserAgent + IntegrationKey + SupportFido + BrowserFp + UnixTimeStamp + AuthToken + IpAddress) Using Secretkey (Can Be Obtained From The App Page) As The Key. |
Sample Code
As in below there are some examples of source code of access the API functions:
Java
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig ();
Client client = Client.create ( config );
WebResource service = client.resource ("https://<domain_name>/v2/CentagateWS/webresources");
Gson gson = new Gson();
String hmac = convertHmacSha256("secretkey","username" + "authresult(true or false)" + "integrationKey" + "unixTimestamp" + "authToken" + "supportFido" + "ipAddress" + "userAgent" + "browserFp");
HashMap<String, String> map = new HashMap<String, String>();
map.put("username", "username");
map.put("authResult", "authresult"); //true or false only
map.put("integrationKey", "integrationKey");
map.put("unixTimestamp", "unixTimeStamp");
map.put("authToken", "authToken");
map.put("ipAddress", "ipAddress");
map.put("userAgent", "userAgent");
map.put("browserFp", "browserFp");
map.put("supportFido", "");
map.put("hmac", hmac);
ClientResponse response = service.path ("auth").path("adaptive").accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, gson.toJson(map));
String retJson = response.getEntity(String.class);
HashMap<String, Object> returnData = (HashMap<String, Object>) gson.fromJson(retJson, HashMap.class);
String code = returnData.get("code").toString();
String message = returnData.get("message").toString();
String object = returnData.get("object").toString();
}
public static String convertHmacSha256(String secretKey, String params) throws NoSuchAlgorithmException,
InvalidKeyException,IllegalStateException, SignatureException, NoSuchProviderException, Exception
{
try
{
final SecretKeySpec secret_key = new SecretKeySpec ( StringUtils.getBytesUtf8 ( secretKey ) , "HmacSHA256" );
final Mac mac = Mac.getInstance ( "HmacSHA256" );
mac.init ( secret_key );
final byte[] bytes = mac.doFinal ( StringUtils.getBytesUtf8 ( params ) );
return Hex.encodeHexString ( bytes );
}
catch ( NoSuchAlgorithmException e )
{
throw new NoSuchAlgorithmException ( e );
}
catch ( InvalidKeyException e )
{
throw new InvalidKeyException ( e );
}
catch ( IllegalStateException e )
{
throw new IllegalStateException ( e );
}
catch ( Exception e )
{
throw new Exception ( e );
}
}
Node Js
const https = require('https')
var crypto = require('crypto');
var username = '<username>';
var authResult = '<authResult>';
var integrationKey = '<integration key>';
var time = Math.round((new Date()).getTime() / 1000);
var unixTimestamp = time.toString();
var authToken = "<authToken>";
var supportFido = "<supportFido>";
var ipAddress = "<ipAddress>";
var userAgent = "<userAgent>";
var browserFp = "<browserFp>";
var secretKey = '<secret key>';
var hmacText = username + authResult + integrationKey + unixTimestamp + authToken + supportFido + ipAddress + userAgent + browserFp;
var hash, hmac;
/* generate hmac value*/
hmac = crypto.createHmac(sha256, secretKey);
hmac.write(hmacText);
hmac.end();
hash = hmac.read().toString('hex');
const data = JSON.stringify({
username: username,
authResult: authResult,
integrationKey: integrationKey,
unixTimestamp: unixTimestamp,
authToken: authToken,
ipAddress: ipAddress,
supportFido: supportFido,
userAgent: userAgent,
browserFp: browserFp,
hmac: hash
})
const options = {
hostname: "<domain_name>",
port: 443,
path:'/v2/CentagateWS/webresources/auth/adaptive',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
}
const req = https.request(options, res =>{
console.log(`HTTP Status Code: ${res.statusCode}`)
var body = '';
res.on('data', function(d){
body += d;
var parsed = JSON.parse(body);
if (parsed.code == 0){
console.log('Authentication Succeed');
console.log('Response:');
console.log(body);
}
else {
console.log('Authentication Fail, ' +'Message:' + parsed.message);
console.log('Code:' + parsed.code);
}
})
})
req.on('ERROR', error => {
console.error(error)
})
req.write(data)
req.end()
PHP
<?php
$url = 'https://<domain_name>/v2/CentagateWS/webresources/auth/adaptive';
$ch = curl_init($url);
$secretKey = "<secretkey>";
$username ="<username>";
$authResult = "<authResult>";
$integrationKey = "<integrationkey>";
$time = time(); // get current timestamp
$unixTimestamp = strval($time); //convert timestamp to String
$authToken = "<authToken>"
$supportFido = "<supportFido>";
$ipAddress = "<ipAddress>";
$userAgent = "<userAgent>";
$browserFp = "<browserFp>";
$hmac_text = $username.$authResult.$authToken.$integrationKey.$unixTimestamp.$supportFido.$ipAddress.$userAgent.$browserFp;
$hmac = hash_hmac('sha256', $hmac_text, $secretKey); // calculate hmac value
$jsonData = array (
'username'=> $username,
'authResult'=> $authResult,
'integrationKey'=> $integrationKey,
'unixTimestamp'=> $unixTimestamp,
'authToken'=> $authToken,
'supportFido'=> $supportFido,
'ipAddress'=> $ipAddress,
'userAgent'=> $userAgent,
'browserFp'=> $browserFp,
'hmac' => $hmac
);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json','Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$obj = json_decode($result);
if ($obj->{'code'} != 0){
print "Authentication fail";
print "Message: ".$obj->{'message'};
echo " <br>";
print "Code: ".$obj->{'code'};
}
else {
print "Authentication succeed";
echo " <br>";
print "Message: ".$obj->{'message'};
echo " <br>";
print "Code: ".$obj->{'code'};
echo " <br>";
print "Result:" ;
echo " <br>";
print $result;
}
curl_close($ch);
?>