SaS token for Azure Event Hub - JSFiddle
Generate SaS token for Azure Event Hub
HTML
<script src="https://cdn.rawgit.com/vvasabi/btn710-a2/master/site/crypto-js-3.0.2/rollups/hmac-sha256.js"></script>
<script src="https://cdn.rawgit.com/vvasabi/btn710-a2/master/site/crypto-js-3.0.2/components/enc-base64.js"></script>
<div><input type="text" id="txtNamespace" value="event hub namespace" onclick="this.value=''"/></div>
<div><input type="text" id="txtHub" value="event hub" onclick="this.value=''"/></div>
<div><input type="text" id="txtKeyName" value="hub policy name" onclick="this.value=''"/></div>
<div><input type="text" id="txtKey" value="hub policy key" onclick="this.value=''"></div>
<div><input type="button" value="Generate Authentication header" onclick="generate()"/></div>
<div id="result"></div>
JavaScript
// Function which creates the Service Bus SAS token.
var getToken = function (m_ServiceNamespace, entityPath, m_SasKeyName, m_SasKey) {
var uri = m_ServiceNamespace +
".servicebus.windows.net/" + entityPath;
var endocedResourceUri = encodeURIComponent(uri);
var t0 = new Date(1970, 1, 1, 0, 0, 0, 0);
var t1 = new Date();
var expireInSeconds = + (31*24*3600) + 365*3600 +
(((t1.getTime() - t0.getTime()) / 1000) | 0);
var plainSignature = utf8Encode(endocedResourceUri +
"\n" + expireInSeconds);
var hash = CryptoJS.HmacSHA256(plainSignature, m_SasKey);
var base64HashValue = CryptoJS.enc.Base64.stringify(hash);
var token = "SharedAccessSignature sr=" + endocedResourceUri + "&sig=" +
encodeURIComponent(base64HashValue) + "&se=" + expireInSeconds + "&skn=" +
m_SasKeyName;
return token;
}
var utf8Encode = function (s) {
for (var c, i = -1, l = (s = s.split("")).length,
o = String.fromCharCode; ++i < l;
s = (c = s[0].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) +
o(0x80 | (c & 0x3f)) : s
);
return s.join("");
}
var generate = function()
{
var namespace = document.getElementById("txtNamespace").value;
var hub = document.getElementById("txtHub").value;
var keyName = document.getElementById("txtKeyName").value;
var key = document.getElementById("txtKey").value;
var result = getToken(namespace, hub, keyName, key);
document.getElementById("result").innerText = result;
}