Question

OAuth2 Access token not getting refreshed

  • 24 August 2023
  • 0 replies
  • 46 views

 

Hey guys,

I’m having issues with refreshing my access token with OAuth2. Seemingly the ‘autoRefresh’ feature isn’t working as I never see the log in ‘refreshAccessToken’.

To replicate the issue we make a API call after the access token is expired from a Zapier trigger. The reason we make API calls after receiving the webhooks is to enrich the data with human readable results. This will work within the access token expiry period, but fails after it needs to be refreshed. All API calls after the expiry seem to use the old access token resulting in 401 errors from our API. 

Am I missing something? What do I need to do to trigger the access token to be refreshed and know its replaced the old token?   

 

Cut down version of authentication config which have been based off this example:

https://github.com/zapier/zapier-platform/blob/main/example-apps/oauth2/authentication.js

export default {
config: {
type: 'oauth2',
oauth2Config: {
authorizeUrl: getAuthorizeUrl,
getAccessToken = async (z: ZObject, bundle: Bundle) => {
const response = await z.request({
url: ...
});

return {
access_token: response.data.access_token,
refresh_token: response.data.refresh_token
};
},
refreshAccessToken = async (z: ZObject, bundle: Bundle) => {
z.console.log('Token refreshing');
const response = await z.request({
url: ...
});

return {
access_token: response.data.id_token,
};
},
autoRefresh: true,
},
fields: [
{
key: 'auth_region',
label: 'Select your region',
type: 'string',
required: true,
choices: getRegionChoices(),
},
],
test,
connectionLabel: '{{name}}',
},
befores: [includeBearerToken],
afters: [handleHTTPError],
};

const includeBearerToken = (request, z, bundle) => {
if (bundle.authData && bundle.authData.access_token) {
request.headers.Authorization = `Bearer ${bundle.authData.access_token}`;
}
return request;
};

const handleHTTPError = (response, z: ZObject, bundle: Bundle) => {
if (response.status >= 400) {
const message = `Unexpected status code ${
response.status
}: request url: ${response.request?.url ?? ''}`;
z.console.log(message);
throw new Error(message);
}
return response;
};

 


This post has been closed for comments. Please create a new post if you need help or have a question about this topic.