How to generate token/refresh token Oauth2 automatically ?

Andrei Radules1
Giga Contributor

Hello,

So I am currently integrating 2  servicenow instances and now I am trying to implement the OAuth2 authentification for the outbound and inbound REST messages. 

Currently, I am able to generate the token manually from the REST message. 

My question is if it is possible to automatize the token generation, possibly include it in the business rule, so the script would basically check if the token has expired and if it has it would use the refresh token to generate a new one and use it for authentication?

Many thanks,

Andrei

10 REPLIES 10

Jay Shah3
Mega Guru

Create a schedule job which runs once a month and put below script to update refresh token

(For first time it needs to be retrieved manually by clicking on "Get OAuth Token" in Rest Message, after that this schedule job can update token at defined interval)

 

var oAuthClient = new sn_auth.GlideOAuthClient();

var params = {//save user id & pwd in system property
    grant_type: "password",
    username: gs.getProperty('intuserid'), 
    password: gs.getProperty('intpwd')
};

var oauthAppRegistry = 'App registry'; // App registry name
var json = new global.JSON();
var text = json.encode(params);
var tokenResponse = oAuthClient.requestToken(oauthAppRegistry, text);
var token = tokenResponse.getToken();
var access_token = token.getAccessToken();
var refresh_token = token.getRefreshToken();
var expIn = token.getExpiresIn();

var expiry = new GlideDateTime();
expiry.addSeconds(expIn); //Access token expiry seconds


var Encrypter = new GlideEncrypter();

//Updates access token if present
var credAcc = new GlideRecord('oauth_credential');
credAcc.addEncodedQuery('peer.name='+oauthAppRegistry+'^type=access_token');
credAcc.orderByDesc('sys_created_by');
credAcc.query();
if (credAcc.next()) {
    credAcc.token_received = Encrypter.encrypt(access_token);
    credAcc.expires = expiry;
    credAcc.update();
}

//Updates refresh token if present
var credRef = new GlideRecord('oauth_credential');
credRef.addEncodedQuery('peer.name='+oauthAppRegistry+'^type=refresh_token');
credRef.orderByDesc('sys_created_by');
credRef.query();
if (credRef.next()) {
   var exp = new GlideDateTime();
   exp.addSeconds(8640000); //Refresh token expiry seconds
    credRef.token_received = Encrypter.encrypt(refresh_token);
    credRef.expires = exp;
    credRef.update();
}