【问题标题】:WebSphere MQ C API Sending client ID with a client connectionWebSphere MQ C API 通过客户端连接发送客户端 ID
【发布时间】:2015-01-15 13:59:14
【问题描述】:

您好,我正在使用 CSP 结构在客户端应用程序上发送客户端 ID,我的目标是让 OAM 基于此 ID 授权队列操作,而不是我的应用程序正在运行的进程的 ID .我观察到的是:

  1. 如果我的进程以 alice 身份运行并且我在 MQCSP 中发送 bob,我会在 MQCONNX 调用中得到 2035。
  2. 如果我在本地计算机上创建用户 alice 并以 alice 的身份在 MQSCSP 中发送 alice 执行程序,则调用成功。
  3. 如果我以 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


    【解决方案1】:

    您在队列管理器方面有什么可以实际使用您的 MQCSP 做任何事情?由于您仅在 V7.5 中,队列管理器没有内置它(即在 V8 中),因此如果您没有安全出口,您的 MQCSP 将被忽略。

    实际上“忽略”不是很准确,我认为内置行为检查 MQCSP 用户和运行身份用户 ID 是否相同。但除非您有安全出口或使用 MQ V8,否则不会检查密码。

    更多信息来自 OP 的更多信息

    'C' 客户端在这方面与 Java 客户端的工作方式不同。 Java 客户端使用 MQEnvironment 集用户 ID 作为 run-as 用户 ID。 Java 无法获取客户端进程 ID 时的历史异常。

    我认为你在这里有三个选择:-

    • 将 MQ V8 与 ADOPTCTX(是)一起使用
    • 使用 CHLAUTH 规则根据客户端 IP 地址和/或以用户身份运行来设置服务器端 MCAUSER
    • 编写一个小的安全出口,将 MQCSP 用户 ID 复制到 MCAUSER

    【讨论】:

    • 我的意图不是对连接进行身份验证,我想要实现的是 OAM 所做的授权检查是基于在 MQCSP 中发送的用户,而不是你所说的运行-作为用户ID,我想它是客户端运行的进程的用户ID。我正在尝试实现与在 Java WebSphere Application Server 中配置连接工厂相同的效果,如果我没记错的话,根据为连接工厂指定的身份验证别名将连接上的用户 ID 传输到管理器。
    • 更新问答
    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 2011-03-04
    • 2018-09-08
    • 2016-10-31
    • 1970-01-01
    • 2023-03-28
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多