IBMMQ 上的身份验证出现奇怪问题,它采用 运行 用户 ID
Strange problem with authentication on IBMMQ, it takes the running user ID
当我在队列中执行消息推送时遇到了一个奇怪的问题。我已将我的应用程序配置为从 app.config 读取 userid/password。当消息被放入队列时,我得到了拥有 运行 应用程序的用户的用户名,它是 .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;
});
我错过了什么吗?
提前致谢
为了连接到 运行 作为连接上提供的用户 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)
您可能需要在属性中添加另一行。
试试(靠记忆,所以你需要找到正确的常量)
USE_MQCSP_USERNAME_PASSWORD 这应该是一个布尔值,应该设置为 yes....
将其添加到您的属性中,然后使用这些属性创建队列管理器。
当我在队列中执行消息推送时遇到了一个奇怪的问题。我已将我的应用程序配置为从 app.config 读取 userid/password。当消息被放入队列时,我得到了拥有 运行 应用程序的用户的用户名,它是 .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;
});
我错过了什么吗? 提前致谢
为了连接到 运行 作为连接上提供的用户 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)
您可能需要在属性中添加另一行。
试试(靠记忆,所以你需要找到正确的常量) USE_MQCSP_USERNAME_PASSWORD 这应该是一个布尔值,应该设置为 yes....
将其添加到您的属性中,然后使用这些属性创建队列管理器。