从.NET连接到MQ系列

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (16)

这个问题有类似问题,但不完全一样......

我有一个使用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上运行相同的代码时,它连接但在尝试写入Queue时失败并出现auth错误2035.我认为这是因为IIS作为不同的用户ID运行。

我尝试添加:

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

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

此时,我正在玩这个,所以我不想让管理员在MQ服务器端设置新的用户ID。考虑到这一点,有什么办法可以在IIS用户下运行时登录,但是传入我的用户名/密码或其他一些凭据来使其工作?

提问于
用户回答回答于

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

IBM developerWorks MQdev博客文章“ MQ V8中的MQCSP密码保护详细介绍了如何使用各种语言执行此操作”。

对于.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(是)。

更新2017/02/20

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

扫码关注云+社区

领取腾讯云代金券