如何将用户定义的用户名从 IBM Websphere Application 服务器传递到 AS400 MQ 服务器进行身份验证?

Posted

技术标签:

【中文标题】如何将用户定义的用户名从 IBM Websphere Application 服务器传递到 AS400 MQ 服务器进行身份验证?【英文标题】:How to pass user defined username from IBM Websphere Application server to AS400 MQ server for authentication? 【发布时间】:2014-11-07 23:42:42 【问题描述】:

我在连接 AS400 MQ 本地队列时遇到问题,它使用代码 JMSWMQ2013 拒绝。

我的应用服务器有一个 username 作为 mquser@mydomain.com 但在 AS400 中我无法在 MQ 对象授权中提供指定的用户名。

有什么方法可以从 windows 机器上的 Websphere Appserver 连接到 AS400 机器中定义的队列?

以下是我在连接时遇到的错误:

FFDC Exception:com.ibm.msg.client.jms.DetailedJMSSecurityException SourceId:com.ibm.ejs.jms.JMSManagedQueueConnection.createConnection ProbeId:116 Reporter:com.ibm.ejs.jms.JMSManagedQueueConnection@db6f33e4
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'TESTQMGR' with connection mode 'Client' and host name 'AS400T(1416)'.
Please check if the supplied username and password are correct on the QueueManager to which you are connecting.

Root cause:  

JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:204)

【问题讨论】:

【参考方案1】:

也许您需要定义单独的 J2C 身份验证别名并将其映射到连接工厂。 My appserver has a username as mquser@mydomain.com是什么意思?

查看此页面2035 MQRC_NOT_AUTHORIZED Connecting to WebSphere MQ了解更多详情:

连接被MQ拒绝的最可能的两个原因如下:

1. The user identifier passed across the client connection from the application 
   server to MQ is not known on the server where the MQ queue manager is running,
   is not authorised to connect to MQ, or is longer than 12 characters and has
   been truncated.
   For queue managers running on Windows, the following error might be seen in 
   the MQ error logs for this scenario:
   AMQ8075: Authorization failed because the SID for entity 'wasuser' 
   cannot be obtained.
   For UNIX no entry in the MQ error logs would be seen by default.
   See technote MQS_REPORT_NOAUTH environment variable can be used 
   to better diagnose return code 2035 for details of enabling error log 
   entries on all platforms.
2. The user identifier passed across the client connection from the 
   application server to MQ is a member of the 'mqm' group on the server 
   hosting the MQ queue manager, and a Channel Authentication Record (CHLAUTH) 
   exists that blocks administrative access to the queue manager. 
   WebSphere MQ configures a CHLAUTH record by default in WebSphere MQ 
   Version 7.1 and later that blocks all MQ admins from connecting 
   as a client to the queue manager.
   The following error in the MQ error logs would be seen for 
   this scenario: AMQ9777: Channel was blocked

【讨论】:

感谢您的回复。我们面临的问题是 AS400 机器,用户应用程序超过 12 个,并且 MQ 中没有用于身份验证记录的选项,因为它是 Websphere MQ 7.0。我认为这与授予权限有关。但是我注意到一个队列的一件事是它的连接,我将其用于监听目的。但是对于我试图放置消息的其他队列,错误代码为 2035 错误。如果您有任何解决方案,请告诉我。谢谢...【参考方案2】:

您在稍后的评论中指出您在 AS/400 上使用 MQ V7.0。

您的问题详细说明了您的用户 ID mquser@mydomain.com 不会被 AS/400 O/S 识别。

因此,您正在寻找一种方法来为您从 Windows 上的应用服务器建立的连接分配用户 ID,以便它可以使用 AS/400 队列管理器上识别的用户 ID 运行。

由于您是 V7.1 之前的版本,因此无法使用 CHLAUTH 规则,因此您的选择是

写一个安全出口来做(或购买/下载一个) 为此连接提供自己的通道,并将 SVRCONN 上的 MCAUSER 设置为 AS/400 O/S 已知和可识别的内容。在这种情况下,还请确保您具有某种形式的身份验证,例如SSL/TLS,以便其他人无法使用此通道。

【讨论】:

【参考方案3】:

用户名密码可以通过setStringPropertyMQQueueConnectionFactory传递

  MQQueueConnectionFactory mqConFactory = new MQQueueConnectionFactory();
  mqConFactory.setStringProperty(WMQConstants.USERID, "username");
  mqConFactory.setStringProperty(WMQConstants.PASSWORD, "password");

  //other configs
  mqConFactory.setHostName("MQ_HOST");
  mqConFactory.setChannel("MQ_CHANNEL");//communications link
  mqConFactory.setPort("MQ_PORT");
  mqConFactory.setQueueManager("MQ_MANAGER");//service provider
  mqConFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);

需要的进口:

  import com.ibm.mq.jms.MQQueueConnectionFactory;
  import com.ibm.msg.client.wmq.WMQConstants;

依赖罐子:

  compile('com.ibm.mq:com.ibm.mq.allclient:9.0.5.0')

部分代码取自page

【讨论】:

以上是关于如何将用户定义的用户名从 IBM Websphere Application 服务器传递到 AS400 MQ 服务器进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight - 如何将参数从应用程序传递到适配器?

IBM Security Directory Server - 如何根据客户端请求修改用户密码?

在 IBM websphere 队列管理器中向域用户授予权限的问题

IBM Worklight - 如何定制 connectOnStartup 失败对话框

云服务上的 IBM Bluemix 应用程序安全性

加密格式的 IBM MobileFirst Platform Studio SQL 适配器用户密码