You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
function decodeBase64WithUriEncoding(encodedText) {
|
|
return Buffer.from(encodedText, 'base64').toString('utf8');
|
|
}
|
|
|
|
function unescapedString(escapedString) {
|
|
escapedString += new Array(5 - (escapedString.length % 4)).join('=');
|
|
return escapedString.replace(/-/g, '+').replace(/_/g, '/');
|
|
}
|
|
|
|
function decodeJWT(idToken) {
|
|
const token = idToken.split('.');
|
|
if (token.length !== 3) {
|
|
throw new Error('Invalid idToken');
|
|
}
|
|
try {
|
|
const headerSegment = JSON.parse(decodeBase64WithUriEncoding(token[0]));
|
|
const payloadSegment = JSON.parse(decodeBase64WithUriEncoding(token[1]));
|
|
const signature = unescapedString(token[2]);
|
|
return {
|
|
dataToSign: [token[0], token[1]].join('.'),
|
|
header: headerSegment,
|
|
payload: payloadSegment,
|
|
signature,
|
|
};
|
|
} catch (e) {
|
|
throw new Error('Invalid payload');
|
|
}
|
|
}
|
|
|
|
function decode(idToken) {
|
|
const decodedJWT = decodeJWT(idToken);
|
|
return decodedJWT.payload;
|
|
}
|
|
|
|
global.Hydro.lib.jwt = module.exports = { decode };
|