Request OTP Challenge API
Request an OTP challenge code for CR OTP authentication.
Below is the URL to access the API functions:
POST /v2/CentagateWS/webresources/req/requestOtpChallenge Parameters
| No | Parameters | Occurrence | Descriptions | 
|---|---|---|---|
| 1 | Username | Required | Registered Username in CENTAGATE Cloud | 
| 2 | DevAccId | Required | The Selected Device Account Id | 
| 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 | OtpType | Optional | Insert "online" if its mobile token or insert "offline" if its hardware token | 
| 11 | TokenId | Optional | Insert Hardware Token Serial Number, if user register more than one hardware token, need to specify the hardware token serial number | 
| 12 | HMAC | Required | HMAC Generated From Combination (Username + DevAccId + OtpType + IntegrationKey + UnixTimeStamp + AuthToken + SupportFido + IpAddress + UserAgent + BrowserFp ) 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" + "devAccId" + "otpType" + "integrationKey" + "unixTimestamp" + "authToken" + "supportFido" + "ipAddress" + "userAgent" + "browserFp");
	HashMap<String, String> map = new HashMap<String, String>();
	map.put("otpType", "otpType"); //Need to insert online if its mobile token or need to insert offline if its hardware token
	map.put("tokenId", "tokenId"); //Need insert hardware token serial number, if user register more than one hardware token and then need to specify the hardware token serial number
	map.put("username", "username");
	map.put("devAccId", "devAccId");
	map.put("authToken", "authToken");
	map.put("integrationKey", "integrationKey");
	map.put("unixTimestamp", "unixTimeStamp");
	map.put("ipAddress", "ipAddress"); 
	map.put("userAgent", "userAgent"); 
	map.put("browserFp", "browserFp"); 
	map.put("supportFido", "supportFido");
	map.put("hmac", hmac); 
	ClientResponse response = service.path ("req").path("requestOtpChallenge").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 integrationKey = "<integration key>";
var time = Math.round((new Date()).getTime() / 1000);
var unixTimestamp = time.toString();
var devAccId = "<devAccId>";
var authToken = "<authToken>";
var supportFido = "<supportFido>";
var ipAddress = "<ipAddress>";
var userAgent = "<userAgent>";
var browserFp = "<browserFp>";
var secretKey    = "<secretKey>";  
var hmacText = username + devAccId + authToken + integrationKey + unixTimestamp + 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,
	devAccId: devAccId,
	authToken: authToken,
	integrationKey: integrationKey,
	unixTimestamp: unixTimestamp,
	ipAddress: ipAddress,
	supportFido: supportFido,
	userAgent: userAgent,
	browserFp: browserFp,
	hmac: hash
})
const options = {
	hostname: "<domain_name>",
	port: 443,
	path:'/v2/CentagateWS/webresources/req/requestOtpChallenge',
	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/req/requestOtpChallenge';
    
    $ch = curl_init($url);
    $secretKey = "<secretKey>";
    $username ="<username>";
    $integrationKey = "<integrationKey>";
    $time = time(); // get current timestamp
    $unixTimestamp = strval($time); //convert timestamp to String
    $devAccId = "<devAccId>";
    $authToken = "<authToken>";
	$otpType = "<otpType>";
	$tokenId = "<tokenId>";
    $ipAddress = "<ipAddress>";
    $userAgent = "<userAgent>";
    
    $hmac_text = $username.$devAccId.$otpType.$integrationKey.$unixTimestamp.$authToken.$ipAddress.$userAgent;
    $hmac = hash_hmac('sha256', $hmac_text, $secretKey); // calculate hmac value
    
    $jsonData = array (
    	'username'=> $username,
    	'devAccId'=> $devAccId,
    	'authToken'=> $authToken,
		'otpType' => $otpType,
		'tokenId' => $tokenId,
    	'integrationKey'=> $integrationKey,
    	'unixTimestamp'=> $unixTimestamp,
    	'ipAddress'=> $ipAddress,
    	'userAgent'=> $userAgent,
    	'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);
?>
