Skip to content

Instantly share code, notes, and snippets.

@jeff-heienickle
Last active June 20, 2024 13:21
Show Gist options
  • Save jeff-heienickle/cc2593000a7801871935fcba28463858 to your computer and use it in GitHub Desktop.
Save jeff-heienickle/cc2593000a7801871935fcba28463858 to your computer and use it in GitHub Desktop.
Decode, reuse, and visualize a JWT in Postman
var jsonData = pm.response.json();
pm.environment.set("jwt", jsonData.access_token);
function parseJwt (token,part) {
var base64Url = token.split('.')[part];
var words = CryptoJS.enc.Base64.parse(base64Url);
var jsonPayload = CryptoJS.enc.Utf8.stringify(words);
return JSON.parse(jsonPayload);
};
var jwtInfo ={};
jwtInfo.size = jsonData.access_token.length;
jwtInfo.header = parseJwt(jsonData.access_token,0);
jwtInfo.payload = parseJwt(jsonData.access_token,1);
jwtInfo.signature = jsonData.access_token.split('.')[2];
jwtInfo.expires = ((jwtInfo.payload.exp-Date.now().valueOf()/1000)/60).toFixed(1);
console.log(jwtInfo);
var template = `
<b>JWT Size:{{response.size}}Bytes. Expires in {{response.expires}} minutes</b><br>
<b>Header </b>
<table>
<tr><th>Property</th><th>Value</th></tr>
{{#each response.header}}
<tr><td>{{@key}}</td><td>{{.}}</td></tr>
{{/each}}
</table>
<b>Payload</b>
<table>
<tr><th>Property</th><th>Value</th></tr>
{{#each response.payload}}
<tr><td>{{@key}}</td><td>{{.}}</td></tr>
{{/each}}
</table>
<b>Claims</b>
<table bgcolor="#FFFFFF">
<tr><th>Claim</th><th>Value</th></tr>
{{#each response.payload.Claims}}
<tr>
{{#each this}}
<td>{{.}}</td>
{{/each}}
</tr>
{{/each}}
</table>
<i>signature:{{response.signature}}</i>
`;
pm.visualizer.set(template, {response: jwtInfo});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment