CryptoJS to generate JWT for Authentication for API call

huntj06
Tera Guru

I'm calling the Zoom.us API (https://zoom.github.io/api/) and to authenticate I need to include a JWT with my API call. However, it seems that functionality is not in ServiceNow yet. 

I've found a few threads around getting the CryptoJS library into ServiceNow, but it doesn't seem to work. I did see on the live code happy hour where they we're able to get this working, but I didn't see any source files available.

I've created a Script Included called CryptoJS in the Global Scope. I've pasted the entire JS Source file named "hmac-sha256" from rollups directory from this source: https://code.google.com/archive/p/crypto-js/downloads

I've removed all the ServiceNow Class Info, and just have a plain script include with nothing but the raw JS data.

Sample:

find_real_file.png

 

Now, I can't figure out how to even call the Script Include inside Xplore or a Fix Script.

Appending the "global." to the CryptoJS reference doesn't seem to work. Actually, line 1 all together gives me a "TypeError: undefined is not a function." If I remove that, the code still isn't finding the library as I have a lot of undefined when I log the output from a function.

Example:

var c = new CryptoJS(); //tried this, and replacing "global" with "c" to ref, not working 
function base64url(source) {
      // Encode in classical base64
      encodedSource = global.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, '_');

      return encodedSource;
}

 

This also returns "undefined". 

var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header));
gs.print("sh: " + stringifiedHeader);

Any suggestions or pointers how to get this library in ServiceNow? 

1 ACCEPTED SOLUTION

Arnoud Kooi
ServiceNow Employee
ServiceNow Employee

Probably you need to put it in a scoped app. (best practice anyway)

Since Jakarta ES5 is available, but global runs in compatibility mode.

 

https://docs.servicenow.com/bundle/kingston-application-development/page/script/JavaScript-engine-up...

View solution in original post

13 REPLIES 13

Would this work for RSA-SHA1 algorithm?


Please mark this response as correct or helpful if it assisted you with your question.

I'm not sure. 

Make sure the Javascript mode of your scoped app is set to ES 5 Standards Mode and not to Compatability

scottl
Kilo Sage

ServiceNow comes with the "CryptoJS" library as part of it's open source software as listed in the stats.do page. However anyone know how to initiate the object for this library, as this may resolve this CryptoJS library import issue?