Ошибка создания SDK ServiceBus Node.Js при создании очереди - PullRequest
0 голосов
/ 05 мая 2019

По понятным причинам части строки подключения / доменные имена скрыты звездочками.

Я использую "azure-sb": "^0.11.0" из npm.Ниже приведен фрагмент кода, в котором я пытаюсь создать очередь.

/* Connection string taken from Azure Portal shared access policies */
let serviceBusService = azure.createServiceBusService(SERVICEBUS_CONNECTION_STRING);

serviceBusService.createQueueIfNotExists(SERVICE_BUS_QUEUE_NAME, function(error){
    if(!error){
        console.log(`Looks like we'll be up and running.`);
    }
    /* This statement gets executed. */
    else {
        console.error(`Something went wrong when trying to boot up: ${error}`);
    }
});

При загрузке произошла ошибка: Ошибка: 401 - InvalidAudience: заголовок авторизации содержит токен снеправильная аудитория.Идентификатор отслеживания: ******, SystemTracker: *****. Servicebus.windows.net:Endpoint=sb:/******.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=*******

Я не изменил никаких настроек, используя строку подключения по умолчанию (не устанавливая аудиторию в любом месте, насколько я вижу), и она не работает.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Как я знаю, если вы внимательно прочитали документ README.md из Azure/azure-sdk-for-node, вы обнаружите три узла узла для служебной шины Azure, как показано ниже.

  1. azure-sb в Сервисные модули Azure
  2. azure-arm-sb в Управление ресурсами Azure (ARM)
  3. azure-asm-sb в Azure Service Management (ASM)

На самом деле им требовалось использовать разные способы проверки подлинности для использования различных функцийпожалуйста, внимательно ознакомьтесь с документом Authentication.md.

Так что для azure-sb он, похоже, используется для доступа к службе Azure ServiceBus, как описано в описании пакета npm, как указано ниже.

Microsoft Azure SDK для Node.js - Галерея

Этот проект предоставляет пакет Node.js для доступа к службе Azure ServiceBus.

Чтобы создать очередь для экземпляра сервисной шины, обратитесь к соответствующему REST API Create Queue, который является менеджером ресурсовEnt API.Поэтому я порекомендовал правильный нужный вам пакет узлов: azure-arm-sb с Service Principal Authentication.

Пример кода без взаимодействия выглядит следующим образом.

const Azure = require('azure');
const MsRest = require('ms-rest-azure');
const ServiceBusManagementClient = require("azure-arm-sb");

MsRest.loginWithServicePrincipalSecret(
  'clientId or appId',
  'secret or password',
  'domain or tenantId',
  (err, credentials) => {
    if (err) throw err

    const client = new ServiceBusManagementClient(credentials, 'subscriptionId');

    // ..use the client instance to manage service resources.
    client.Queues.createOrUpdate(resourceGroupName, namespaceName, queueName, parameters: sbQueue, function(sbq) {
    })

  }
);

Пожалуйстасм. больше деталей для azure-arm-sb package.Надеюсь, это поможет.

0 голосов
/ 06 мая 2019

Проблема обычно возникает, когда имя устройства в javascript не синхронизировано с именем издателя в сгенерированном вами ключе SAS.

Например.

enter image description here

Когда переменная deviceName в коде (который используется в POST URL) совпадает с именем издателя в ключе SAS, все работает нормально, независимо от того, закомментированы ли дополнительные заголовки или нет.

Когда я меняю имя устройства, которое НЕ соответствует издателю в ключе SAS, оно немедленно выдает ошибку недопустимой аудитории токена авторизации.

Эта штука прекрасно работала весь день с закомментированными дополнительными заголовками, если имя устройства совпадает с токеном Publishers в SAS.

попытайтесь проверить и посмотрите, поможет ли это.

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