Как использовать userId в MQCSP для аутентификации соединения IBM MQ в клиенте C - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть клиент C для подключения к IBM MQ, и я ввожу ID пользователя и пароль в MQCSP следующим образом:

        MQCNO Connect_options = {MQCNO_DEFAULT};
        MQCSP   csp = {MQCSP_DEFAULT};
        Connect_options.SecurityParmsPtr = &csp;
        Connect_options.Version = MQCNO_VERSION_5;

        csp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD;
        csp.CSPUserIdPtr = "user2";
        csp.CSPUserIdLength = strlen("user2");
        csp.CSPPasswordPtr = "password";
        csp.CSPPasswordLength = strlen((char*)"password");

, а затем вызываю MQCONNX () для подключения к серверу MQ, запустите клиентс пользователем «user1», но сервер всегда аутентифицирует пользователя, на котором запущено приложение «user1».

Я настроил MQ-сервер следующим образом:

ALTER QMGR CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
DEFINE AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) +
    AUTHTYPE(IDPWOS) +
    FAILDLAY(10) +
    CHCKLOCL(OPTIONAL) +
    CHCKCLNT(REQUIRED) +
    ADOPTCTX(YES) 
REFRESH SECURITY TYPE(CONNAUTH)

define qlocal(HDPARLOCALQUEUE01) replace

define channel(HDPARCHANNEL) +
   chltype(SVRCONN) +
   trptype(TCP) +
   MCAUSER(' ')
alter channel(HDPARCHANNEL) +
  chltype(SVRCONN) +
  MCAUSER(' ')
ALTER QMGR CHLAUTH(DISABLED)

Как получитьMQ-сервер аутентифицирует пользователя, предоставленного в MQCSP?

Я добавил «ChlauthEarlyAdopt = Y» в qm.ini

С уважением,

1 Ответ

0 голосов
/ 02 февраля 2019

Чтобы администратор очередей IBM MQ использовал ID, который вы передаете в структуре MQCSP для целей авторизации, вам нужно настроить объект QMGR CONNAUTH AUTHINFO с ADOPTCTX(YES).В вашем примере вы пытаетесь это сделать, но он потерпит неудачу, потому что объект SYSTEM.DEFAULT.AUTHINFO.IDPWOS существует по умолчанию.


Если вы хотите обновить существующий объект, вы не можете использовать DEFINE для измененияэто, если вы не сопровождаете это ключевым словом REPLACE, или вы можете использовать команду ALTER для этого.


Я бы также рекомендовал определить ваш собственный объект AUTHINFO с параметрами, которые выхочу, это предотвратит переопределение будущими обновлениями любых нестандартных настроек.

Например:

DEFINE AUTHINFO(MY.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKLOCL(OPTIONAL) CHCKCLNT(REQUIRED) ADOPTCTX(YES) LIKE(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
ALTER QMGR CONNAUTH(MY.AUTHINFO.IDPWOS)
REFRESH SECURITY TYPE(CONNAUTH)

Я также вижу, что вы отключили CHLAUTH, обычно значение по умолчанию CHLAUTH правила не вызовут каких-либо проблем, а только предотвратят две вещи:

  1. Вы не можете подключиться к любому каналу, который начинается с SYSTEM, вы этого не делаете.
  2. Вы не можете подключиться как пользователь MQ Admin, например mqm или эквивалентный.Я вижу, что ваш пример показывает user2, если это пользователь из группы mqm, вы будете заблокированы.

    @ MoragHughson написал хороший блог IBM developerWorks MQdev под названием " Начало работы безотключение MQ Security", которое объясняет, как сохранить эту защиту включенным, и будет хорошей отправной точкой.

...