Use bearer token for REST Message authentication

Lucas Fernando
Tera Contributor

Hi.

 

I'm building a REST Message application to get data from a third-party API. However I'm stuck at the authentication setting.

 

To get the data I need, I need to use a bearer token, but this token only lasts for one hour. So I need to get the token (using POST) and, after it, make a GET request.

 

I can get the token, but I have no idea how I pass it as an authentication parameter to the POST request.

 

Has anyone faced this problem?

 

Thanks for the help.

1 ACCEPTED SOLUTION

Kamil Smusz
Kilo Sage

Hi Lucas,

 

You can create script include which will be using Rest Message to generate token - this will be function 1 then you can create second function and call there Rest Message to get data and pass token to this function from first function. In that scenario second function will trigger token generation each time when it will run. Example below

getToken: function() {

        try {
            var rm = new sn_ws.RESTMessageV2('xxx', "Token");
            var response = rm.execute();
            var responsebody = response.getBody();
            var httpStatus = response.getStatusCode();

            var a = JSON.parse(responsebody);
            var token = a.access_token;
            
            return token;
        } catch (ex) {
            var message = ex.getMessage();
            gs.error("xxx:Token:Error: " + message);
        }
    },

    getlist: function() {

        try {

            var date = new GlideDate();
            date.addMonthsUTC(-1);
            var rm = new sn_ws.RESTMessageV2('xxx', "GET list");
            rm.setStringParameter('date', date);
            rm.setStringParameter('token', this.getToken());
            var response = rm.execute();
            var responsebody = response.getBody();
            var httpStatus = response.getStatusCode();

            var a = JSON.parse(responsebody);
			
            return a;
        } catch (ex) {
            var message = ex.getMessage();
            gs.error("xxx:getlist:Error: " + message);
        }
    },

In Rest Message you need to add token like below (name of the parameter may be different then authorization but it will be described in documentation from 3rd party)

KamilSmusz_0-1680218243053.png

 

View solution in original post

26 REPLIES 26

What should i pass in the content of Token rest message?

HI @Divya2411 ,

 

Parameters to get that Token. I don't know what is your 3rd party app.

Hi @Kamil Smusz  @Lucas Fernando  

I am new to integrations. I'm also going through the same issue, can you please tell me the whole process to get this done.

 

Thanks in advance.

harikrishna De1
Tera Contributor

var QueueStatsIntegration = Class.create();

QueueStatsIntegration.prototype = {
initialize: function() {},

processIntegration: function() {
var body = "username=username&password=password";

var authRequest = new sn_ws.RESTMessageV2();
authRequest.setEndpoint("https://xxxxxxxxxxxx");
authRequest.setRequestHeader("Accept", "application/json");
authRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
authRequest.setHttpMethod('POST');
authRequest.setRequestBody(body);

var authResponse = authRequest.execute();
var responseBody = authResponse.getBody();
var token = responseBody.access_token;
var httpStatus = authResponse.getStatusCode();

gs.info('Body:', body);
gs.info('HTTP Status:', httpStatus);
gs.info('Token:', token);

if (httpStatus === 200) {
var queueStatsRequest = new sn_ws.RESTMessageV2();
queueStatsRequest.setRequestHeader('Authorization', 'Bearer ' + token);
queueStatsRequest.setHttpMethod('GET');
queueStatsRequest.setEndpoint('https://xxxxxxxxxxxx');

var queueStatsResponse = queueStatsRequest.execute();
var queueStats = queueStatsResponse.getBody();
gs.info('Queue Stats Response:'+ queueStats);
} else {
gs.error('Authentication failed. Unable to fetch queue stats.');
}
},

type: 'QueueStatsIntegration'
};

 

@Kamil Smusz -The above script include is also not working, can you please look into this and help me with the issue?

hi @harikrishna De1 have you try to split it to 2 functions (one for token and second to get data) like in my example? Also i suggest to use try() catch() in this functions