· 6 years ago · Feb 17, 2019, 04:42 AM
1function generateJWT(){
2 //set credentials
3 var BASE_URL = document.getElementById("baseUrl").value;
4 var ACCESS_KEY = document.getElementById("accessKey").value;
5 var SECRET_KEY = document.getElementById("secretKey").value
6 var ACCOUNT_ID = document.getElementById("accountId").value;
7 //Get List of Cycles
8 var METHOD = document.getElementById("method").value;
9 var API_URI = document.getElementById("apiURI").value;
10 var JWT_EXPIRE = document.getElementById("jwtExpire").value | 3600;
11 if(API_URI) {
12 var RELATIVE_PATH = API_URI.split(BASE_URL)[1].split("?")[0];
13 var QUERY_STRING = API_URI.split(BASE_URL)[1].split("?")[1];
14 var CANONICAL_PATH;
15 if (QUERY_STRING) {
16 CANONICAL_PATH = METHOD + '&' + RELATIVE_PATH + '&' + QUERY_STRING;
17 } else {
18 CANONICAL_PATH = METHOD + '&' + RELATIVE_PATH + '&';
19 }
20 }else{
21 return;
22 }
23 var header = {
24 "alg": "HS256",
25 "typ": "JWT"
26 };
27 var jwt_payload = {
28 'sub': ACCOUNT_ID,
29 'qsh': CryptoJS.SHA256(CANONICAL_PATH).toString(),
30 'iss': ACCESS_KEY,
31 'exp': new Date().getTime()+JWT_EXPIRE,
32 'iat': new Date().getTime()
33 }
34 var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header));
35 var encodedHeader = base64url(stringifiedHeader);
36 var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(jwt_payload));
37 var encodedData = base64url(stringifiedData);
38 var token = encodedHeader + "." + encodedData;
39 var signature = CryptoJS.HmacSHA256(token, SECRET_KEY);
40 signature = base64url(signature);
41 var signedToken = token + "." + signature;
42 document.getElementById("token").innerHTML=signedToken;
43 }
44 function base64url(source) {
45 // Encode in classical base64
46 encodedSource = CryptoJS.enc.Base64.stringify(source);
47 // Remove padding equal characters
48 encodedSource = encodedSource.replace(/=+$/, '');
49 // Replace characters according to base64url specifications
50 encodedSource = encodedSource.replace(/\+/g, '-');
51 encodedSource = encodedSource.replace(/\//g, '_');
52 return encodedSource;
53 }