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

Arnoud Kooi
ServiceNow Employee
ServiceNow Employee

It did work for me...

 

https://youtu.be/1bhHwhLstmQ?t=15m5s

 

Maybe a cache.do?

Do you get result in Xplore when you run just global.CryptoJS ?

 

find_real_file.png

 

undefined is my response. cache.do results in no change. 

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...

Did you manage to get it to work?