Skip to content

Instantly share code, notes, and snippets.

@jcarley
Last active December 5, 2020 15:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcarley/8682664949673d40538fe8484aeb8caa to your computer and use it in GitHub Desktop.
Save jcarley/8682664949673d40538fe8484aeb8caa to your computer and use it in GitHub Desktop.
Postman pre-request script to automatically get a bearer token from Auth0 and save it for reuse. Two approaches.
const echoPostRequest = {
url: 'https://<my url>.auth0.com/oauth/token',
method: 'POST',
header: 'Content-Type:application/json',
body: {
mode: 'application/json',
raw: JSON.stringify(
{
client_id:'<your client ID>',
client_secret:'<your client secret>',
audience:'<my audience>',
grant_type:'client_credentials'
})
}
};
var getToken = true;
if (!pm.environment.get('accessTokenExpiry') ||
!pm.environment.get('currentAccessToken')) {
console.log('Token or expiry date are missing')
} else if (pm.environment.get('accessTokenExpiry') <= (new Date()).getTime()) {
console.log('Token is expired')
} else {
getToken = false;
console.log('Token and expiry date are all good');
}
if (getToken === true) {
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
if (err === null) {
console.log('Saving the token and expiry date')
var responseJson = res.json();
pm.environment.set('currentAccessToken', responseJson.access_token)
var expiryDate = new Date();
expiryDate.setSeconds(expiryDate.getSeconds() + responseJson.expires_in);
pm.environment.set('accessTokenExpiry', expiryDate.getTime());
}
});
}
// Reference: https://nicolaswidart.com/blog/automatically-set-authentication-tokens-in-postman-requests
var authServiceUrl = pm.environment.get('authService');
var gatewayBaseUrl = pm.environment.get('gatewayBaseUrl');
var username = pm.environment.get('username');
var password = pm.environment.get('password');
var sdk = require('postman-collection');
var isValidTokenRequest = new sdk.Request({
url: gatewayBaseUrl + "/api/item/items", // Use an endpoint that requires being authenticated
method: 'GET',
header: [
new sdk.Header({
key: 'content-type',
value: 'application/json',
}),
new sdk.Header({
key: 'acccept',
value: 'application/json',
}),
new sdk.Header({
key: 'Authorization',
value: 'Bearer ' + pm.globals.get("jwttoken"),
}),
]
});
pm.sendRequest(isValidTokenRequest, function (err, response) {
if (response.code === 401) {
refreshToken();
}
});
function refreshToken() {
var tokenRequest = new sdk.Request({
url: authServiceUrl,
method: 'POST',
header: [
new sdk.Header({
key: 'content-type',
value: 'application/json'
}),
new sdk.Header({
key: 'acccept',
value: 'application/json'
}),
],
body: {
mode: 'raw',
raw: JSON.stringify({
username: username,
password: password
})
}
});
pm.sendRequest(tokenRequest, function (err, response) {
if (err) {
throw err;
}
if (response.code !== 200) {
throw new Error('Could not log in.');
}
pm.globals.set("jwttoken", response.json().token);
console.log(`New token has been set: ${response.json().token}`);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment