【问题标题】:Connecting from .NET to MQ-Series从 .NET 连接到 MQ 系列
【发布时间】:2017-02-18 21:23:44
【问题描述】:

和这个有类似的问题,但不完全相同...

我有一个使用 amqmdnet.dll 的 C# 程序(来自 9.0.1.0 MQC Redist) 连接代码为:

Hashtable mqProperties = new Hashtable();   
mqProperties.Add(MQC.CHANNEL_PROPERTY, channelName); 
mqProperties.Add(MQC.HOST_NAME_PROPERTY, hostname); 
mqProperties.Add(MQC.PORT_PROPERTY, port); 
queueManager = new MQQueueManager(strQueueManagerName, mqProperties);

它工作正常并写入队列。我假设它会从 Windows 获取我当前的登录 ID。

当我在 IIS 上运行相同的代码时,它会连接但在尝试写入队列时失败并出现身份验证错误 2035。我认为这是因为 IIS 以不同的用户 ID 运行。

我尝试添加:

mqProperties.Add(MQC.USER_ID_PROPERTY, "myuserid");
mqProperties.Add(MQC.PASSWORD_PROPERTY, "mypassword");

它没有工作。尝试“mydomain\myuserid”也没有用。其他一些帖子提到 MQ 需要 Windows SID。我尝试使用该字符串,但这也不起作用。

此时,我正在玩这个,所以我不想让管理员在 MQ 服务器端设置一个新的用户 ID。考虑到这一点,在 IIS 用户下运行时,我是否可以通过任何方式登录,但传入我的用户 ID/密码或其他凭据以使其正常工作?

【问题讨论】:

  • 它是V9还是V10(我相信它可能在上周刚刚升级)
  • 我想确保我的答案是正确的,建议的更改对您有用吗?

标签: ibm-mq


【解决方案1】:

如果队列管理器是 v8.0 或更高版本并且被配置为使用 CONNAUTH 并且设置了 ADOPTCTX(YES),那么您可以提供一个 ID 和密码。如果没有此设置,则 .NET 客户端的 UserId 和 Password 属性中显示的值将被忽略。

IBM developerWorks MQdev 博客文章“MQCSP Password Protection in MQ V8 详细介绍了如何以各种语言执行此操作。”

对于 .NET,您应该能够使用将 MQC.USE_MQCSP_AUTHENTICATION_PROPERTY 设置为 true 的功能:

mqProperties.Add(MQC.USER_ID_PROPERTY, "myuserid");
mqProperties.Add(MQC.PASSWORD_PROPERTY, "mypassword");
mqProperties.Add(MQC.USE_MQCSP_AUTHENTICATION_PROPERTY, true);

然后队列管理器将验证此 ID。如果队列管理器设置为 ADOPTCTX(YES),那么它将始终使用经过身份验证的 ID 进行 OAM 检查。如果它设置为 ADOPTCTX(NO),它仍将使用进程正在运行的 ID 来执行 OAM 检查。强烈建议将其设置为 ADOPTCTX(YES)。

2017 年 2 月 20 日更新

与评论“我可以看到它可能已被管理员关闭,因此 MQ 依赖于更大的组织 SSO 基础架构。”相关。在不设置 CONNAUTH 和 ADOPTCTX(YES) 的情况下,您可以通过频道断言 any id。如果没有 CHLAUTH 规则来阻止管理用户,那么您无需任何形式的身份验证即可获得完整的 MQ 管理权限。

【讨论】:

  • 这看起来像我在做的事情(我添加了 MQC.USE_MQCSP_AUTHENTICATION_PROPERTY,但结果相同)。我需要询问CONNAUTH 和ADOPTCTX(YES)。我认为您是说登录的 Windows 用户可以在没有这些的情况下连接到 MQ,但如果我想显式发送用户 ID/密码,我需要设置这些。我可以看到它可能被管理员关闭,因此 MQ 依赖于更大的组织 SSO 基础架构。感谢您的帮助。
  • 不,还没有。虽然这是我们需要的东西,但现在已经推迟了。
  • 我有几乎相同的问题,但我发送的是服务器上的本地用户的用户 ID 和密码。但没有成功..
  • CONNAUTH AUTHINFO 对象上的 ADOPTCTX 值设置为多少?如果您将 CONNAUTH 设置为 OPTIONAL、REQADM 或 REQUIRED,则将根据发送的 UserId 和 Password 进行身份验证。如果 ADOPTCTX(NO) 则授权基于启动进程的用户,如果 ADOPTCTX(YES) 则授权基于与密码一起发送的 UserId。
  • @DariusX。我最近在IBM MQ v9 Knowledge Center page "User IDs" 中注意到它显示了一个将id 传递给id@domain 的Windows 队列管理器的示例,我注意到在您的问题中您说您尝试了myuseridmydomain\myuserid,也许这可能导致您遇到的问题。
猜你喜欢
  • 2011-05-10
  • 2023-04-05
  • 2020-11-27
  • 2011-02-09
  • 2013-09-28
  • 2018-07-07
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多