1

我正在尝试从 WebSphere App Server 7 创建 JMS 连接,但不断获得 JMSWMQ2013(MQ 原因代码为 2035)。显然这是一个身份验证问题,我可以看到 许多 其他 类似的 报告,所以我对一般问题有一个粗略的了解。

我正在等待我们的运营团队就频道的确切配置提供反馈,但与此同时,我有一个非常令人费解的观察结果。如果我使用 WebSphere 的 JAAS 身份验证来提供用户标识,那么我总是会收到JMSWMQ2013错误消息。但是,如果将相同的用户标识显式传递给 JMS 队列连接工厂对 的调用createQueueConnection(),则不会出现身份验证错误。

老实说,我本来希望这两种技术都能保持一致。使用 JAAS 为 JMS 队列连接工厂提供凭据时,我是否遗漏了一些微妙之处?

编辑: 我在 WAS 中使用打开 JMS 跟踪*=info: JMSApi=all: JMSServer=all: Messaging=all: JMS_WASTraceAdapter=all: com.ibm.mq.*=all: jmsApi=all,并逐行比较输出。

使用 JAAS 时,我可以看到它的深处JmsXAQueueConnectionImpl实际上正在调用WMQConnection.getProcessUserId()它返回我的 WAS 实例正在运行的用户 ID(这绝对不是通道中定义的用户MCAUSER)。

这一切都很奇怪......它似乎根本没有选择 JAAS 身份验证条目。我的 QCF 肯定是使用具有 DefaultPrincipalMapping 映射配置别名的 CLIENT 传输,但由于某种原因,它仍然使用进程的用户 ID 而不是 JAAS 用户 ID。

谢谢。克雷格

4

2 回答 2

1

以操作系统管理员身份运行 IBM WebSphere MQ Explorer。在队列管理器属性中禁用通道的标识记录(菜单链接/连接或类似的东西)。

于 2013-10-02T08:28:03.967 回答
0

2035肯定是认证问题。尝试连接的用户 ID 无权访问 MQ 资源。

关于,您的以下评论:

如果我使用 WebSphere 的 JAAS 身份验证来提供用户 ID,那么我总是会收到 JMSWMQ2013 错误。但是,如果将相同的用户标识显式传递给 JMS 队列连接工厂对 createQueueConnection() 的调用,则不会出现身份验证错误。

你的预期是正确的。两种技术的行为方式应该相同。如果用户 id 可以访问,那么两者都应该连接,如果没有,那么两者都应该抛出错误。

对您的问题的唯一解释可能是,您在这些应用程序中不知不觉地发送了不同的用户 ID。

例如,您的用户 ID 是“User123”,它可以访问 MQ 资源。

但是,可能是 WebSphere 的 JAAS 身份验证将域与用户 ID 一起发送。假设您的用户 id 在“开发者”域中,那么发送的用户 id 是“开发者\用户 123”,它可能无法访问该资源。

于 2013-09-23T11:43:24.713 回答