首页 > 解决方案 > IBMMQ 上身份验证的奇怪问题,它需要正在运行的用户 ID

问题描述

当我在队列中推送消息时,我遇到了一个奇怪的问题。我已将我的应用程序配置为从 app.config 读取用户 ID/密码。当消息放入队列时,我得到了运行应用程序的用户的用户名,它是 .config 文件之一。

我用来创建 MQQueueManager 的代码是

  private static readonly Lazy<MQQueueManager> lazy =
        new Lazy<MQQueueManager>(() =>
        {
            var properties = new Hashtable();

            var container = ContainerWrapper.Container;

            IConfiguration configuration = container.GetInstance<IConfiguration>();

            properties.Add(MQC.HOST_NAME_PROPERTY, configuration.GetValue<string>("HOST_NAME_PROPERTY"));
            properties.Add(MQC.PORT_PROPERTY, configuration.GetValue<int>("PORT_PROPERTY"));
            properties.Add(MQC.USER_ID_PROPERTY, configuration.GetValue<string>("USER_ID_PROPERTY"));
            properties.Add(MQC.PASSWORD_PROPERTY, configuration.GetValue<string>("PASSWORD_PROPERTY"));
            properties.Add(MQC.CHANNEL_PROPERTY, configuration.GetValue<string>("CHANNEL_PROPERTY"));


            MQQueueManager queueManager = new MQQueueManager(configuration.GetValue<string>("QUEUE_MANAGER_NAME"), properties);


            return queueManager;
        });

我错过了什么吗?提前致谢

标签: c#ibm-mq

解决方案


为了让您的连接以连接时提供的用户 ID 和密码运行,您必须配置队列管理器以检查用户 ID 和密码,并且您还必须配置队列管理器以采用经过验证的用户 ID。

DISPLAY QMGR CONNAUTH

CONNAUTH 字段中的值是 AUTHINFO 对象的名称。如果为空,则不启用用户 ID 和密码检查。将其设置为适当的对象名称。

ALTER QMGR CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)

现在看看它的属性。

DISPLAY AUTHINFO(name-from-connauth) ALL

如果ADOPTCTK设置为NO,则不会采用用户 ID 作为连接的用户 ID,因此不会在消息上下文中看到。

ALTER AUTHINFO(name-from-connauth) AUTHTYPE(IDPWOS) ADOPTCTX(YES)

如果您必须进行任何更改,您现在必须发出此命令。

REFRESH SECURITY TYPE(CONNAUTH)

推荐阅读