使用 Java 客户机进行连接认证

连接认证是 IBM® MQ 中的一项功能,使您能够配置队列管理器,以便队列管理器可以使用提供的用户标识和密码对应用程序进行认证。 当应用程序是使用客户机传输的 Java 应用程序时,可以在兼容性方式或 MQCSP 认证方式下运行连接认证。

要认证的用户标识和密码由应用程序使用下列其中一种方法指定:
  • IBM MQ classes for Java 应用程序中,在 MQEnvironment 类中,或者在传递到 com.ibm.mq.MQQueueManager 构造函数的属性 Hashtable 中。
  • IBM MQ classes for JMS 应用程序中,作为 createConnection(String username, String Password)createContext(String username, String password) 方法的自变量。

MQCSP 认证方式

在此方式下,将应用程序运行所使用的客户端用户标识以及要认证的用户标识和密码发送到队列管理器。 IBM MQ classes for JavaIBM MQ classes for JMS 将要认证的用户标识和密码发送到 MQCSP 结构中的队列管理器。

用户标识和密码可用于 MQCSP 结构中的服务器连接安全出口。 可在通道的 MQCXP 结构的 SecurityParms 字段中找到 MQCSP 结构地址。

MQCSP 认证方式具有以下优点:

  • 要认证的用户标识的最大长度为 1024 个字符。
  • 用于认证的密码的最大长度为 256 个字符。
  • 当使用 ADOPTCTX (NO) 配置用于控制队列管理器上的连接认证的认证信息对象时,可以使用应用程序运行所使用的客户机端用户标识来执行授权检查以使用 IBM MQ 资源。

兼容性方式

IBM MQ 8.0之前, Java 客户机可以通过客户机连接通道将用户标识和密码发送到服务器连接通道,并将其提供给 MQCD 结构的 RemoteUserIdentifier RemotePassword 字段中的安全出口。 在兼容性方式下,将保留此行为。

您可以将此方式与连接认证结合使用,并从先前用于执行同一作业的任何安全出口进行迁移。

此方式具有以下限制:

  • 用户标识和密码的长度不得超过 12 个字符。 长度超过 12 个字符的用户标识将截断为 12 个字符。 这可能会导致连接失败,原因码为 MQRC_NOT_AUTHORIZED。
  • 应用程序运行所使用的客户机端用户标识不会发送到队列管理器。 必须在用于控制队列管理器上的连接认证的认证信息对象上设置 ADOPTCTX (YES) ,或者使用其他方法 (例如,基于 TLS 证书的通道认证规则) 来设置已检查以授权使用 IBM MQ 资源的通道 MCA 用户标识。

缺省认证方式

IBM MQ classes for JavaIBM MQ classes for JMS 客户机应用程序使用的缺省认证方式因应用程序是否指定用户标识和密码而异。

  • [MQ 9.2.1 2020 年 12 月]IBM MQ 9.2.1开始,如果指定了用户标识和密码,那么缺省情况下将使用 MQCSP 认证。
  • IBM MQ 9.2.1之前的版本中,如果指定了用户标识和密码,那么缺省方式如下所示:
    • 缺省情况下, MQCSP 认证由使用 IBM MQ classes for Java的应用程序使用。
    • 缺省情况下,使用 IBM MQ classes for JMS的应用程序使用兼容性方式。
  • 如果指定了用户标识,但未指定密码,那么缺省情况下将使用兼容性方式。
  • 如果未指定用户标识,那么将始终使用兼容性方式。
在指定了用户标识的情况下,可以由应用程序为每个单独的连接选择特定认证方式,也可以在启动应用程序之前全局设置,如 选择认证方式中所述。
[MQ 9.2.1 2020 年 12 月]注: 使用 IBM MQ classes for JMS 的应用程序可能会受到 IBM MQ 9.2.1中缺省认证方式更改的影响。 将 IBM MQ classes for JMS 升级到 IBM MQ 9.2.1后,缺省情况下先前使用兼容性方式的应用程序将改为使用 MQCSP 认证。 这可能导致先前成功连接到队列管理器的应用程序无法与包含原因码 2035 (MQRC_NOT_AUTHORIZED) 的 JMSException 连接。 如果发生这种情况,请使用 选择认证方式 中描述的其中一种方法来指定应用程序使用兼容性方式。

使用本地绑定连接到队列管理器的 Java 应用程序始终使用 MQCSP 认证方式。

选择认证方式

可以使用下列其中一种方法来指定 Java 客户机应用程序使用的认证方式,这些客户机应用程序在连接到队列管理器时指定用户标识。 这些方法按优先顺序降序列出。 如果未使用这些方法中的任何方法指定认证方式,那么将使用缺省认证方式。
[MQ 9.2.1 2020 年 12 月]注: 已在 IBM MQ 9.2.1中说明如何使用这些方法来选择认证方式。 在某些情况下,当 IBM MQ classes for JavaIBM MQ classes for JMS 升级到 IBM MQ 9.2.1时, Java 客户机应用程序使用的认证方式可能会更改。 这可能导致先前成功连接到队列管理器的应用程序无法与包含原因码 2035 (MQRC_NOT_AUTHORIZED) 的 JMSException 连接。 如果发生此情况,请使用下列其中一种方法来选择所需的认证方式。
  • 通过在连接到队列管理器之前在应用程序中设置相应的属性,为每个单独的连接指定认证方式。
    • 使用 IBM MQ classes for Java时,请在传递给 com.ibm.mq.MQQueueManager 构造函数的属性 Hashtable 中设置属性 MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY
    • 使用 IBM MQ classes for JMS时,请设置属性 JmsConstants。在创建连接之前,请在相应的连接工厂上使用 USER_AUTHENTICATION_MQCSP
    将这些属性的值设置为下列其中一个值:
    true
    向队列管理器认证时使用 MQCSP 认证方式。
    false
    向队列管理器认证时使用兼容性方式。
  • 通过在启动应用程序时设置 com.ibm.mq.cfg.jmqi.useMQCSPauthentication Java 系统属性,指定应用程序所建立的所有客户机连接的认证方式。 将该属性的值设置为下列其中一个值:
    Y
    向队列管理器认证时使用 MQCSP 认证方式。
    N
    向队列管理器认证时使用兼容性方式。
    例如,以下命令设置属性以选择兼容性方式并启动 Java 应用程序:
    java -Dcom.ibm.mq.cfg.jmqi.useMQCSPauthentication=N application_name
  • 通过在启动应用程序的环境中设置 com.ibm.mq.jmqi.useMQCSPauthentication 环境变量,为在同一环境中启动的应用程序所建立的所有客户机连接指定认证方式。 将环境变量的值设置为下列其中一个值:
    Y
    向队列管理器认证时使用 MQCSP 认证方式。
    N
    向队列管理器认证时使用兼容性方式。
  • 通过在客户机配置文件的 JMQI 节中指定 useMQCSPauthentication 属性,为使用特定 IBM MQ MQI client 客户机配置文件的所有应用程序指定认证方式。 将属性值设置为下列其中一个值:
    YES
    向队列管理器认证时使用 MQCSP 认证方式。
    向队列管理器认证时使用兼容性方式。
    有关 useMQCSPauthentication 属性的更多信息,请参阅 客户机配置文件的 JMQI 节

IBM MQ Explorer 中选择认证方式

IBM MQ ExplorerJava 应用程序,因此这两种方式 (兼容性方式和 MQCSP 认证方式) 也适用于它。

IBM MQ 9.1.0开始, MQCSP 认证方式是缺省方式。 在 IBM MQ 9.1之前,兼容性方式是缺省值。

在提供了用户标识的面板上,有一个用于启用或禁用兼容性方式的复选框:
  • IBM MQ 9.1.0开始,缺省情况下未选中此复选框。 要使用兼容性方式,请选中此复选框。
  • 缺省情况下,在 IBM MQ 9.1.0之前,此复选框处于启用状态。 要使用 MQCSP 认证,请清除该复选框。