Какие дополнительные действия необходимы для устранения ошибки MQRC_NOT_AUTHORIZED

Я использую механизм кода IBMCloud и пример проекта IBM Code Engine.

У меня возникла проблема с авторизацией при подключении к удаленному серверу IBM MQ из моего приложения Node.js, работающего в контейнере Docker. Несмотря на настройку необходимых переменных и параметров среды, приложение завершает работу с ошибкой:

MQError: OPEN: MQCC = MQCC_FAILED [2] MQRC = MQRC_NOT_AUTHORIZED [2035]

Окружающая среда и настройка:

  • Версия Node.js: 18
  • Базовый образ Docker для этапа сборки: ubuntu:20.04
  • Базовый образ Docker для этапа выполнения: node:16-slim
  • Модуль IBM MQ Node.js: ibmmq
# Stage 1: Build
FROM ubuntu:20.04 as builder

ENV NODE_VERSION 18
ENV APP_DIR /usr/local/clientapp

WORKDIR ${APP_DIR}

RUN apt-get update \
    && apt-get install -y --no-install-recommends curl gcc g++ make git ca-certificates \
    && curl --silent -k --location https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm

COPY . ${APP_DIR}

# Install packages for the application
RUN npm install --only=prod \
    && apt-get autoremove -y curl make gcc g++ python3 git \
    && apt-get purge -y \
    && rm -rf /var/lib/apt/lists/* \
    && chmod a+rx ${APP_DIR}/*

# Stage 2: Runtime
FROM node:16-slim as clientAppImage

ENV APP_DIR /usr/local/clientapp
WORKDIR ${APP_DIR}

# Copy built application from the builder stage
COPY --from=builder ${APP_DIR}/ ${APP_DIR}

# Copy the MQ configuration files
COPY ccdt/FOO_BAR.TAB ${APP_DIR}/mqconfig/FOO_BAR.TAB

# Set environment variables for MQ
ENV MQCHLLIB=${APP_DIR}/mqconfig
ENV MQCHLTAB=FOO_BAR.tab
ENV CCDTURL=file://${APP_DIR}/mqconfig/FOO_BAR.tab

EXPOSE 8080
CMD npm start

Фрагмент кода для соединения MQ

// approutes.js
const inboundQueueName = "SOME.INBOUND.QUEUE";
let mqclientInbound = new MQClient(inboundQueueName);


// mqclient.js
constructor(queueName) {
        this[_HCONNKEY] = null;
        this[_HOBJKEY] = null;
        this._queueName = queueName;
    }

performConnection() {
    return new Promise((resolve, reject) => {
        this.buildCNO()
            .then((cno) => {
                debug_info("CNO Built");
                return mq.ConnxPromise(MQDetails.QMGR, cno);
            })
            .then((hconn) => {
                debug_info("Connected to MQ");
                this[_HCONNKEY] = hconn;
                return this.performOpen();
            })
            .then((hObj) => {
                debug_info("MQ Queue is open");
                this[_HOBJKEY] = hObj;
                resolve();
            })
            .catch((err) => {
                debug_warn("Error establishing connection to MQ");
                debug_warn(err);
                reject(err);
            });
    });
    debug_info("Establishing Connection to MQ");
}

performOpen() {
    let od = new mq.MQOD();
    od.ObjectName = this._queueName;
    od.ObjectType = MQC.MQOT_Q;

    let openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_BROWSE;
    debug_info("Performing open", this[_HCONNKEY]);

    return mq.OpenPromise(this[_HCONNKEY], od, openOptions); //<--- FAILING HERE
}

Попытки отладки

  • Наличие файла: проверено наличие файла .tab в контейнере.
  • Чувствительность к регистру файлов: обеспечивается единообразный регистр имен файлов.
  • Отладка кода: добавлено дополнительное ведение журнала для проверки места возникновения ошибки.
  • Клиент против сервера: подтверждено, что установка использует только клиентские соединения и не требует локальных подключений администратора очередей.

Несмотря на эти действия, приложение по-прежнему сталкивается с ошибкой авторизации.

Просьба о помощи:

  • Авторизация. Какие дополнительные действия необходимы для устранения ошибки MQRC_NOT_AUTHORIZED при подключении к удаленному серверу IBM MQ?
  • Конфигурация. Существуют ли какие-либо конкретные конфигурации или параметры, которые необходимо настроить в файле Dockerfile или коде приложения для правильной авторизации соединения?

Любые рекомендации или предложения будут с благодарностью приняты. Спасибо!

Посмотрите ошибки, сгенерированные в AMQERR01.LOG администратора очередей, это покажет причину.

JoshMc 28.05.2024 03:07

Вы устанавливаете csp.UserId и csp.Password? Из вашего предыдущего вопроса неясно, нужны они вам или нет.

chughts 28.05.2024 10:01

Администратор очередей удален, и у меня нет к нему доступа. У меня есть доступ только к MQ Client. Есть ли какие-либо журналы клиента MQ, которые могли бы помочь? Я не использую UserId или Password, потому что удаленный администратор MQIPT/MQ Manager сказал мне, что мне это не нужно. Должен ли я все равно их запрашивать?

Uhnj 28.05.2024 14:37

@Uhnj Может ли администратор MQ проверить журнал администратора очередей, чтобы помочь в отладке 2035?

richc 28.05.2024 14:52

Я только что отправил электронное письмо с просьбой сделать это. Я сообщу обновленную информацию, когда получу от них ответ.

Uhnj 28.05.2024 15:27

Если вы не устанавливаете идентификатор пользователя/пароль, отключите логику, которая это делает cno.SecurityParms = csp;

chughts 29.05.2024 14:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы не хотите указывать идентификатор пользователя/пароль, вам необходимо отключить следующую логику.

let csp = new mq.MQCSP();
csp.UserId = credentials.USER;
csp.Password = credentials.PASSWORD;
cno.SecurityParms = csp;

Я понял, в чем проблема. параметры let openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_BROWSE; вызывали проблему с аутентификацией. Как только я сменил его на MQOO_OUTPUT, я смог нормально подключиться.

Uhnj 29.05.2024 23:08

Другие вопросы по теме

Как определить исходящую очередь в примере программы IBM mq от codeengine
Как я могу добавить этому пользователю разрешение на размещение сообщений в диспетчере очередей из приложения JMS?
Проблема подключения JNDI с mq-jms-spring-boot-starter
CWWKS1100A: Не удалось выполнить аутентификацию для администратора с идентификатором пользователя. Указан неверный идентификатор пользователя или пароль
Поместите свойства сообщения JMS в очередь IBM MQ и получите доступ к ним из другого клиента JMS, работающего на платформе Websphere Freedom
MQRC_Q_MGR_NAME_ERROR
Запустите маршрут Apache Camel из другого приложения весенней загрузки
Как получить сообщение IBM MQ по идентификатору сообщения с помощью bash? есть ли в наличии инструмент?
Разрешения на путь к данным MQ
Как проверить, какой JmsOutboundGateway использовался шлюзом обмена сообщениями (два JmsOutboundGateway, подключенные к одному и тому же входному каналу) – Spring Integration