通过 REST 将消息发送到 Azure 服务总线队列
send msg to Azure service bus que via REST
Azure Queues 暴露给 REST API.To 使 REST 调用有效。我 运行 在 POSTMAN 上进行了样本测试。 POST 调用
https://yournamespace.servicebus.windows.net/yourentity/messages
此外,传递低于 2 headers 和值。
Header 1:
Authorization: SharedAccessSignature sr=https%3A%2F%2F.servicebus.windows.net%2Fyourentity&sig=yoursignature from code above&se=1529928563&skn=KeyName
示例:
SharedAccessSignature sr=https%3A%2F%2Fservicebussoatest1.servicebus.windows.net%2Fpublishque&sig=a0wmRklbCGFCYoSCViij9gagtZV9Bg+vU=&se=1529928563&skn=testpolicy
Header 2:
Content-Type: application/json
但是即使我传递了正确的授权值,我还是收到以下错误:
401:Invalid Authorization Token signature
401:Invalid Authorization Token signature
根据401错误的意思是token不可用。
首先请确保您的策略有权发送消息。
其次,如果你想使用azure service bus Send Message Rest APi。格式应如下。
POST https://<yournamespace>.servicebus.windows.net/<yourentity>/messages
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
我们还可以获得有关使用共享访问的服务总线访问控制的更多信息
来自 this article.
的签名
我也用邮递员做了一个演示。它在我这边工作正常。
我使用以下代码获取 SAS 令牌。
public static string GetSasToken(string resourceUri, string keyName, string key, TimeSpan ttl)
{
var expiry = GetExpiry(ttl);
string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
}
private static string GetExpiry(TimeSpan ttl)
{
TimeSpan expirySinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1) + ttl;
return Convert.ToString((int)expirySinceEpoch.TotalSeconds);
}
string queueUrl = "https://tomtestsb.servicebus.windows.net/" + "queue" + "/messages";
string token = GetSasToken(queueUrl,"Key", "value", TimeSpan.FromDays(1));
我们可以通过 Azure 门户获取密钥和值
使用 Postman 进行测试。
Headers:
Authorization:SharedAccessSignature sr=https%3a%2f%2fyournamespace.servicebus.windows.net%2fqueuename%2fmessages&sig=SyumAUNnqWFjW2MqjwlomU%2fbblqZljq6LPJp3jpfU%2b4%3d&se=1529478623&skn=KeyName
Content-Type:application/xml
Body
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">This is a message.</string>
测试结果:
这对我有用:
url到POST到:https://[ServiceBusNamespace].servicebus.windows.net/[QueueName]/messages
授权:使用 Tom Sun - MSFT 提供的代码
内容类型: application/json
Azure Queues 暴露给 REST API.To 使 REST 调用有效。我 运行 在 POSTMAN 上进行了样本测试。 POST 调用
https://yournamespace.servicebus.windows.net/yourentity/messages
此外,传递低于 2 headers 和值。
Header 1:
Authorization: SharedAccessSignature sr=https%3A%2F%2F.servicebus.windows.net%2Fyourentity&sig=yoursignature from code above&se=1529928563&skn=KeyName
示例:
SharedAccessSignature sr=https%3A%2F%2Fservicebussoatest1.servicebus.windows.net%2Fpublishque&sig=a0wmRklbCGFCYoSCViij9gagtZV9Bg+vU=&se=1529928563&skn=testpolicy
Header 2:
Content-Type: application/json
但是即使我传递了正确的授权值,我还是收到以下错误:
401:Invalid Authorization Token signature
401:Invalid Authorization Token signature
根据401错误的意思是token不可用。
首先请确保您的策略有权发送消息。
其次,如果你想使用azure service bus Send Message Rest APi。格式应如下。
POST https://<yournamespace>.servicebus.windows.net/<yourentity>/messages
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
我们还可以获得有关使用共享访问的服务总线访问控制的更多信息 来自 this article.
的签名我也用邮递员做了一个演示。它在我这边工作正常。
我使用以下代码获取 SAS 令牌。
public static string GetSasToken(string resourceUri, string keyName, string key, TimeSpan ttl)
{
var expiry = GetExpiry(ttl);
string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
}
private static string GetExpiry(TimeSpan ttl)
{
TimeSpan expirySinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1) + ttl;
return Convert.ToString((int)expirySinceEpoch.TotalSeconds);
}
string queueUrl = "https://tomtestsb.servicebus.windows.net/" + "queue" + "/messages";
string token = GetSasToken(queueUrl,"Key", "value", TimeSpan.FromDays(1));
我们可以通过 Azure 门户获取密钥和值
使用 Postman 进行测试。
Headers:
Authorization:SharedAccessSignature sr=https%3a%2f%2fyournamespace.servicebus.windows.net%2fqueuename%2fmessages&sig=SyumAUNnqWFjW2MqjwlomU%2fbblqZljq6LPJp3jpfU%2b4%3d&se=1529478623&skn=KeyName
Content-Type:application/xml
Body
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">This is a message.</string>
测试结果:
这对我有用:
url到POST到:https://[ServiceBusNamespace].servicebus.windows.net/[QueueName]/messages
授权:使用 Tom Sun - MSFT 提供的代码
内容类型: application/json