【发布时间】:2015-01-15 13:59:14
【问题描述】:
您好,我正在使用 CSP 结构在客户端应用程序上发送客户端 ID,我的目标是让 OAM 基于此 ID 授权队列操作,而不是我的应用程序正在运行的进程的 ID .我观察到的是:
- 如果我的进程以 alice 身份运行并且我在 MQCSP 中发送 bob,我会在 MQCONNX 调用中得到 2035。
- 如果我在本地计算机上创建用户 alice 并以 alice 的身份在 MQSCSP 中发送 alice 执行程序,则调用成功。
- 如果我以 alice 身份运行程序但在 MQCSP 中发送 bob,则 MQCONNX 将失败并显示 2035 原因码。
为什么很明显,在第三种情况下,用于授权的 ID 似乎是在 MQSCP 字段中发送的 ID,而在第一种情况下却不是?
除了使用MQSCP结构中的字段发送MQCONNX调用的options参数中的CLNTID之外,还有什么需要设置的吗?
环境是在 Linux 上运行的 WMQ 7.5。
代码是:
MQCNO mqcno = {MQCNO_DEFAULT};
mqcno.Version = MQCNO_VERSION_5;
// Identification
if (mqpar->user != NULL) {
MQCSP sp = {MQCSP_DEFAULT};
sp.Version = MQCSP_CURRENT_VERSION;
sp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD;
sp.CSPUserIdPtr = mqpar->user;
sp.CSPUserIdLength = strlen(mqpar->user);
sp.CSPPasswordPtr = mqpar->pwd;
sp.CSPPasswordLength = strlen(mqpar->pwd);
mqcno.SecurityParmsPtr = &sp;
}
MQCONNX("",&mqcno,mgrd,retc,reasc);
感谢您的帮助。
从 OP 制作的后续 cmets 添加额外信息。
编写此代码的目的不是验证连接,而是让 OAM 根据在 MQCSP 中发送的用户而不是客户端进程正在运行的用户 ID 进行授权检查。
我正在尝试实现与在 Java WebSphere Application Server 中配置连接工厂相同的效果,如果我没记错的话,根据为连接指定的身份验证别名将连接上的用户 ID 传输到管理器工厂。
【问题讨论】:
标签: ibm-mq