web-dev-qa-db-fra.com

envoyer un msg à la file d'attente du bus de service Azure via REST

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

8
user3796942

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

enter image description here

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:

enter image description here

13
Tom Sun - MSFT