如何在 Postman 中创建 SAS 令牌以与服务总线一起使用?
How to create SAS token in Postman to use with Service bus?
基于此 Microsoft 文档:
https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token
nodejs 的代码是:
function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri);
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var signatureUTF8 = utf8.encode(signature);
var hash = crypto.createHmac('sha256', saKey).update(signatureUTF8).digest('base64');
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hash) + '&se=' + ttl + '&skn=' + saName;
}
我在 Postman 上尝试过,以防有人需要帮助。这是使用 Postman
在预请求脚本下对我有用的代码
var namespace = pm.collectionVariables.get("serviceNamespace");
var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages";
var saName = pm.collectionVariables.get("SharedAccessKeyName");
var saKey = pm.collectionVariables.get("SharedAccessKeySend");
var sasToken = createSharedAccessToken(uri, saName, saKey);
console.log(sasToken);
pm.collectionVariables.set("SasToken", sasToken);
function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri).toLowerCase();
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var hash = CryptoJS.HmacSHA256(signature, saKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hashInBase64) + '&se=' + ttl + '&skn=' + saName;
}
从 Azure 门户获取值 - 服务总线
服务命名空间、SharedAccessKey、SharedAccessKeyName
-
var namespace = pm.collectionVariables.get("serviceNamespace");
var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages";
var saName = pm.collectionVariables.get("SharedAccessKeyName");
var saKey = pm.collectionVariables.get("SharedAccessKeySend");
var sasToken = createSharedAccessToken(uri, saName, saKey);
console.log(sasToken);
pm.collectionVariables.set("SasToken", sasToken);
function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri).toLowerCase();
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var hash = CryptoJS.HmacSHA256(signature, saKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hashInBase64) + '&se=' + ttl + '&skn=' + saName;
}
注意:adfTest
部分为主题名称,请替换为您的主题名称
var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages";
这些是 post
的要求
POST https://<yournamespace>.servicebus.windows.net/<yourentity>/messages
Content-Type: application/json
Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<yourentity>&sig=<yoursignature from code above>&se=1438205742&skn=KeyName
ContentType: application/atom+xml;type=entry;charset=utf-8
URL 应该是这样的:
https://.servicebus.windows.net//消息
这将使用 pre-request 脚本在 collection
下生成的 SAS 令牌添加授权 header
这可以是任何 json 数据
基于此 Microsoft 文档: https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token
nodejs 的代码是:
function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri);
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var signatureUTF8 = utf8.encode(signature);
var hash = crypto.createHmac('sha256', saKey).update(signatureUTF8).digest('base64');
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hash) + '&se=' + ttl + '&skn=' + saName;
}
我在 Postman 上尝试过,以防有人需要帮助。这是使用 Postman
在预请求脚本下对我有用的代码var namespace = pm.collectionVariables.get("serviceNamespace");
var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages";
var saName = pm.collectionVariables.get("SharedAccessKeyName");
var saKey = pm.collectionVariables.get("SharedAccessKeySend");
var sasToken = createSharedAccessToken(uri, saName, saKey);
console.log(sasToken);
pm.collectionVariables.set("SasToken", sasToken);
function createSharedAccessToken(uri, saName, saKey) {
if (!uri || !saName || !saKey) {
throw "Missing required parameter";
}
var encoded = encodeURIComponent(uri).toLowerCase();
var now = new Date();
var week = 60*60*24*7;
var ttl = Math.round(now.getTime() / 1000) + week;
var signature = encoded + '\n' + ttl;
var hash = CryptoJS.HmacSHA256(signature, saKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
return 'SharedAccessSignature sr=' + encoded + '&sig=' +
encodeURIComponent(hashInBase64) + '&se=' + ttl + '&skn=' + saName;
}
从 Azure 门户获取值 - 服务总线 服务命名空间、SharedAccessKey、SharedAccessKeyName
-
var namespace = pm.collectionVariables.get("serviceNamespace"); var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages"; var saName = pm.collectionVariables.get("SharedAccessKeyName"); var saKey = pm.collectionVariables.get("SharedAccessKeySend"); var sasToken = createSharedAccessToken(uri, saName, saKey); console.log(sasToken); pm.collectionVariables.set("SasToken", sasToken); function createSharedAccessToken(uri, saName, saKey) { if (!uri || !saName || !saKey) { throw "Missing required parameter"; } var encoded = encodeURIComponent(uri).toLowerCase(); var now = new Date(); var week = 60*60*24*7; var ttl = Math.round(now.getTime() / 1000) + week; var signature = encoded + '\n' + ttl; var hash = CryptoJS.HmacSHA256(signature, saKey); var hashInBase64 = CryptoJS.enc.Base64.stringify(hash); return 'SharedAccessSignature sr=' + encoded + '&sig=' + encodeURIComponent(hashInBase64) + '&se=' + ttl + '&skn=' + saName; }
注意:adfTest
部分为主题名称,请替换为您的主题名称
var uri = "https://" + namespace + ".servicebus.windows.net/adfTest/messages";
这些是 post
的要求 POST https://<yournamespace>.servicebus.windows.net/<yourentity>/messages
Content-Type: application/json
Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<yourentity>&sig=<yoursignature from code above>&se=1438205742&skn=KeyName
ContentType: application/atom+xml;type=entry;charset=utf-8
URL 应该是这样的: https://.servicebus.windows.net//消息
这将使用 pre-request 脚本在 collection
下生成的 SAS 令牌添加授权 header这可以是任何 json 数据