// JWT generation script adapted from
var jwtSecret = pm.environment.get('jwt_secret') || ''
console.log('jwtSecret:', jwtSecret)
// Set headers for JWT
var header = {
'alg': 'RS384',
'typ': 'JWT',
// 'kid': '',
};
// Prepare timestamp in seconds
var currentTimestamp = Math.floor(Date.now() / 1000)
var data = {
'iss': pm.environment.get('jwt_iss') || '',
'sub': pm.environment.get('jwt_iss') || '',
'jti': `myvisits_${currentTimestamp}`, // unique identifier for the JWT.
'exp': currentTimestamp + 5*60 - 15, // expiry time is 60 seconds from time of creation
'nbf': currentTimestamp,
'iat': currentTimestamp,
}
console.log('data:', data)
function base64url(source) {
// Encode in classical base64
// source = CryptoJS.enc.Utf8.parse(source)
let encodedSource = CryptoJS.enc.Base64.stringify(source)
// Remove padding equal characters
encodedSource = encodedSource.replace(/=+$/, '')
// Replace characters according to base64url specifications
encodedSource = encodedSource.replace(/\+/g, '-')
encodedSource = encodedSource.replace(/\//g, '_')
console.log('base64url:', source, encodedSource)
return encodedSource
}
// encode header
var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header))
var encodedHeader = base64url(stringifiedHeader)
// encode data
var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(data))
var encodedData = base64url(stringifiedData)
// build token
var token = `${encodedHeader}.${encodedData}`
// sign token
var signature = CryptoJS.HmacSHA384(token, CryptoJS.enc.Base64.parse(jwtSecret))
signature = base64url(signature)
var signedToken = `${token}.${signature}`
pm.environment.set('jwt_signed', signedToken)
console.log('Signed and encoded JWT', signedToken)