Google Service Account signing JWT

I am trying to get an access token using a request for Google Service Account.

I am trying to create a JWT to get an access token for a Google Service Account to use in a Postman Pre-Request script.

But I keep getting this error in the Postman Console:


And in the Postman Response window I get:

There was an error in evaluating the Pre-request Script:  undefined: undefined

I localized the error to be failing here:

var jwt = KJUR.jws.JWS.sign(null, header, claimSet, privateKey);

I’m importing it by using a request to and saving it to an environment variable called jsrsasign then rehydrating it below with eval.

Pre-Request Script:

var navigator = {};
var window = {};

var scope = pm.environment.get('scope');
var iss = pm.environment.get('iss');
var privateKey = pm.environment.get('privateKey');

const header = {"alg" : "RS256", "typ" : "JWT"};

const claimSet =
  "iss": iss,
  "scope": scope,
  "exp":KJUR.jws.IntDate.get("now + 1hour").toString(),
  "iat": KJUR.jws.IntDate.get("now").toString()

console.log(`header: ${ JSON.stringify(header)}`);
console.log(`claim set: ${ JSON.stringify(claimSet) }`);

var jwt = KJUR.jws.JWS.sign(null, header, claimSet, privateKey);

pm.environment.set('jwt', jwt);

Similar issue to this guy’s comment on Medium:

Here is my StackOverflow post if you guys are interested in gaining some reputation as well:

Seems to be an issue when I try and call the JSRSASign library it doesn’t have all the methods I expected. In fact all I see in it’s JWS object is:

 {parseJWS: "[Function]"}

Solved this:

My private key had escaped white space characters in it ( \n , \t )

I opened up google chrome dev tools and just saved it to a variable with template literals and console logged it out to get a properly formatted key.

Another option may just to do that in Postman as well.

After that, it worked.

Published Collection:

1 Like