Example: JavaScript

The following code is an example of how to generate access tokens in JavaScript.

/*
* Vivox Token Generation Example - JavaScript
*
* NOTE: There are multiple ways to handle SHA-256 in JavaScript
* Stanford JS Crypto Library - https://crypto.stanford.edu/sjcl/ (used below)
* Source - http://bitwiseshiftleft.github.io/sjcl/sjcl.js
* SHA256 from NPM - https://www.npmjs.com/package/sha256
*
*/

function vxGenerateToken(key, payload) {
    // Header is static - base64url encoded {}
    var base64urlHeader = base64URLEncode("{}"); // Can also be defined as a constant "e30"

    // Encode payload
    var base64urlPayload = base64URLEncode(payload);

    // Join segments to prepare for signing
    var segments = [base64urlHeader, base64urlPayload];
    var toSign = segments.join(".");

    // Sign token with key and SHA-256
    var hmac = new sjcl.misc.hmac(sjcl.codec.utf8String.toBits(key), sjcl.hash.sha256);
    signature = sjcl.codec.base64.fromBits(hmac.encrypt(toSign));
    var base64urlSigned = signature.replace(/\+/g, "-").replace(/\//g, "_").replace(/\=+$/, "");

    segments.push(base64urlSigned);

    return segments.join(".");
}

function base64URLEncode(value) {
    return Base64.encode(value).replace(/\+/g, "-").replace(/\//g, "_").replace(/\=+$/, "");
}

claims = {
    "iss": "issuer",
    "exp": 1559359105,
    "vxa": "join",
    "f": "sip:.username.@domain.vivox.com",
    "t": "sip:confctl-g-channelname@domain.vivox.com"
};

// Example usage
var token = vxGenerateToken("secret", claims);
console.log(token);