Les files d'attente Azure sont exposées à REST API. Pour que l'appel REST fonctionne. J'ai exécuté un exemple de test sur POSTMAN. Le POST appel
https://yournamespace.servicebus.windows.net/yourentity/messages
En outre, en passant en dessous de 2 en-têtes et valeurs.
En-tête 1:
Authorization: SharedAccessSignature sr=https%3A%2F%2F.servicebus.windows.net%2Fyourentity&sig=yoursignature from code above&se=1529928563&skn=KeyName
Exemple:
SharedAccessSignature sr=https%3A%2F%2Fservicebussoatest1.servicebus.windows.net%2Fpublishque&sig=a0wmRklbCGFCYoSCViij9gagtZV9Bg+vU=&se=1529928563&skn=testpolicy
En-tête 2:
Content-Type: application/json
Mais même si j'ai passé la bonne valeur d'autorisation, j'obtiens l'erreur ci-dessous:
401: signature de jeton d'autorisation non valide
401: signature de jeton d'autorisation non valide
Selon l'erreur 401, cela signifie que le jeton n'est pas vaild.
Veuillez d'abord vous assurer que votre police a accès pour envoyer le message.
Deuxièmement, si vous souhaitez utiliser le Azure service bus Send Message Rest APi . Le format doit être le suivant.
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
Nous pourrions également obtenir plus d'informations sur le contrôle d'accès Service Bus avec les signatures d'accès partagé de cet article .
Je fais aussi une démo avec le facteur. Cela fonctionne correctement de mon côté.
J'utilise le code suivant pour obtenir le jeton 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));
Nous pourrions obtenir la clé et la valeur avec le portail Azure
Testez-le avec Postman.
En-têtes:
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
Corps
<string xmlns="http://schemas.Microsoft.com/2003/10/Serialization/">This is a message.</string>
Résultat du test: