OAuth Refresh Token Job
Setup a scheduled job to ensure refresh tokens do not expire.
function refreshAccessToken(requestorId, oauthProfileId, token) {
if (!(token && requestorId && oauthProfileId)) return;
var tokenRequest = new sn_auth.GlideOAuthClientRequest();
tokenRequest.setGrantType("refresh_token");
tokenRequest.setRefreshToken(token.getRefreshToken());
tokenRequest.setParameter('oauth_requestor_context','x_snd_eb_connection');
tokenRequest.setParameter('oauth_requestor', requestorId);
tokenRequest.setParameter('oauth_provider_profile',oauthProfileId);
var oAuthClient = new sn_auth.GlideOAuthClient();
var tokenResponse = oAuthClient.requestTokenByRequest(null,tokenRequest);
var error = tokenResponse.getErrorMessage();
if (error) gs.warn("Error:" + tokenResponse.getErrorMessage());
}
function isExpired(expiresIn, withinSeconds) {
if (expiresIn > withinSeconds) return false;
return true;
}
function getToken(requestorId, oauthProfileId) {
if (!requestorId || !oauthProfileId) return null;
var client = new sn_auth.GlideOAuthClient();
return client.getToken(requestorId, oauthProfileId);
}
function checkAndRefreshAccessToken(connection) {
if (connection.getValue("auth_type") != "OAuth 2.0") return false;
var accountMsg = connection.getValue("name");
if (!accountMsg)
accountMsg = connection.getUniqueValue();
accountMsg = "Account=\"" + accountMsg + "\"";
var token = getToken(connection.getUniqueValue(), connection.getValue('oauth_profile'));
var accessToken = token.getAccessToken();
if (accessToken) {
if (!isExpired(token.getExpiresIn(), 300)) return;
}
if (!token.getRefreshToken()) {
gs.error("No OAuth refresh token for Rest Message. Manual reauthorization required. " + accountMsg);
return;
}
if (isExpired(token.getRefreshTokenExpiresIn(), 0)) {
gs.error("OAuth refresh token for Rest Message is expired. Manual reauthorization required. " + accountMsg);
return;
}
gs.info("Refreshing oauth access token for Rest Message account. " + accountMsg);
refreshAccessToken(connection.getUniqueValue(), connection.getValue('oauth_profile'), token);
}
var connection = new GlideRecord("x_snd_eb_connection");
connection.addQuery("auth_type", "OAuth 2.0");
connection.addNotNullQuery("oauth_profile");
connection.addQuery('active', true);
connection.query();
while (connection.next()) {
checkAndRefreshAccessToken(connection);
}Last updated
Was this helpful?
