这里有一些类似的问题,但并不完全相同。
我有一个使用amqmdnet.dll的C#程序(来自9.0.1.0MQC 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服务器端设置一个新的userid。考虑到这一点,有没有什么方法可以在IIS用户下运行时登录,而不是传入我的用户I/密码或其他凭据来使其工作?
发布于 2017-02-19 05:40:38
如果队列管理器是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/02/20
与评论“我可以看到它可能被管理员关闭,以便MQ依赖于更大的组织SSO基础设施”有关。无需设置CONNAUTH和ADOPTCTX(是),您可以通过通道断言任何您想要的 id。如果没有CHLAUTH规则来阻止管理用户,那么您可以获得完全的MQ管理权限,而无需任何形式的身份验证。
https://stackoverflow.com/questions/42320838
复制相似问题