首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从.NET连接到MQ系列

从.NET连接到MQ系列
EN

Stack Overflow用户
提问于 2017-02-19 05:23:45
回答 1查看 1.2K关注 0票数 1

这里有一些类似的问题,但并不完全相同。

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

代码语言:javascript
复制
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运行的。

我尝试添加:

代码语言:javascript
复制
mqProperties.Add(MQC.USER_ID_PROPERTY, "myuserid");
mqProperties.Add(MQC.PASSWORD_PROPERTY, "mypassword");

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

现在,我正在处理这个问题,所以我不想让管理员在MQ服务器端设置一个新的userid。考虑到这一点,有没有什么方法可以在IIS用户下运行时登录,而不是传入我的用户I/密码或其他凭据来使其工作?

EN

回答 1

Stack Overflow用户

发布于 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来使用您所拥有的内容

代码语言:javascript
复制
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管理权限,而无需任何形式的身份验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42320838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档