Регистрация в Azure Notification Hub возвращает ошибку 401 ERR_Aborted - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь зарегистрироваться / подписаться на свой Центр уведомлений Azure через JavaScript (jQuery AJAX), но я получаю ERR_ABORTED 401 ответный вызов

Мой вызов AJAX

  function sendNHRegistrationRequest()
 {
    var deferred = $.Deferred();
    $.ajax({
        type: "POST",
        url: originalUri + "/registrations/?api-version=2014-09",
        dataType: "jsonp",
        headers: {
            "Content-Type": "application/atom+xml;type=entry;charset=utf-8",
            "Authorization": sasToken,
            "x-ms-version": "2015-01"
        },

где sasToken является

SharedAccessSignature ср = HTTPS% 3a% 2f% 2fmydomain.servicebus.windows.net% 2fpnc-MyApp-тест & сиг = 9g3EPtKq% 2FUKv26MQ% 2B5ceL11z7f4WySrQ16U61iXA% 2BzU% 3D & SE = 1538544653 & СКН = DefaultFullSharedAccessSignature

, который получен с использованием CryptoJS против моего начального connectionString

 function splitConnectionString()
 {
   var parts = connectionString.split(';');
   if (parts.length != 3)
   {console.log("Error with connection string");
   } else {

   parts.forEach(function(part) {
     if (part.indexOf('Endpoint') == 0) {
     endpoint = 'https' + part.substring(11);
     } else if (part.indexOf('SharedAccessKeyName') == 0) {
     sasKeyName = part.substring(20);
     } else if (part.indexOf('SharedAccessKey') == 0) {
     sasKeyValue = part.substring(16);
     }
   });
   }

   originalUri = endpoint + hubName;
 }

 function generateSaSToken()
 {
   targetUri = encodeURIComponent(originalUri.toLowerCase()).toLowerCase();
   var expiresInMins = 1000; // 1000 minute expiration

   // Set expiration in seconds.
   var expireOnDate = new Date();
   expireOnDate.setMinutes(expireOnDate.getMinutes() + expiresInMins);
   var expires = Date.UTC(expireOnDate.getUTCFullYear(), expireOnDate
     .getUTCMonth(), expireOnDate.getUTCDate(), expireOnDate
     .getUTCHours(), expireOnDate.getUTCMinutes(), expireOnDate
     .getUTCSeconds()) / 1000;
   var tosign = targetUri + '\n' + expires;

   // Using CryptoJS.
   var signature = CryptoJS.HmacSHA256(tosign, sasKeyValue);
   var base64signature = signature.toString(CryptoJS.enc.Base64);
   var base64UriEncoded = encodeURIComponent(base64signature);

   // Construct authorization string.
   sasToken = "SharedAccessSignature sr=" + targetUri + "&sig="
                   + base64UriEncoded + "&se=" + expires + "&skn=" + sasKeyName;

 }

Я видел дискуссии вокруг ServerKey - где мне нужно было бы включить ServerKey в мой запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...