Skip to content

Instantly share code, notes, and snippets.

@FerraBraiZ
Created July 13, 2018 05:21
Show Gist options
  • Save FerraBraiZ/3311bd215d51b284723c3dc11181ceb7 to your computer and use it in GitHub Desktop.
Save FerraBraiZ/3311bd215d51b284723c3dc11181ceb7 to your computer and use it in GitHub Desktop.
Creating JWT the JS way
<!-- Including CryptoJS required libraries -->
<script src="//cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/hmac-sha256.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64-min.js"></script>
<p>
<strong>JSON Web Token:</strong><br/>
<span id="header"></span>.<span id="payload"></span>.<span id="signature"></span>
</p>
// Defining our token parts
var header = {
"alg": "HS256",
"typ": "JWT"
};
var data = {
"id": 1337,
"username": "john.doe"
};
var secret = "My very confidential secret!!!";
function base64url(source) {
// Encode in classical base64
encodedSource = 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;
}
var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header));
var encodedHeader = base64url(stringifiedHeader);
document.getElementById("header").innerText = encodedHeader;
var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(data));
var encodedData = base64url(stringifiedData);
document.getElementById("payload").innerText = encodedData;
var signature = encodedHeader + "." + encodedData;
signature = CryptoJS.HmacSHA256(signature, secret);
signature = base64url(signature);
document.getElementById("signature").innerText = signature;
body {
font-family: Arial;
background: #222;
font-size: 14px;
color: #bbb;
}
#header {
color: green;
}
#payload {
color: orange;
}
#signature {
color: red;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment