Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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?