C#控制台应用传入凭证连接IBM MQ报2035未授权错误如何处理
解决思路
1. 通道认证(CHLAUTH)规则排查
- IBM MQ默认开启CHLAUTH规则,会自动拦截管理员组用户(如mqm、administrator等)通过SVRCONN通道的连接请求,若你传入的用户名属于高权限管理员组,会直接被规则拦截返回2035错误。
- 可在MQ服务器执行命令
DISPLAY CHLAUTH(*) ALL查看所有通道认证规则,确认是否存在匹配你当前连接IP、所用通道、传入用户名的拦截规则,可临时调整规则放行对应用户测试。
2. 连接认证(CONNAUTH)配置校验
- 执行命令
DISPLAY QMGR CONNAUTH查看队列管理器的连接认证配置,若配置指向SYSTEM.DEFAULT.AUTHINFO.IDPWOS,说明开启了操作系统用户校验,此时你传入的用户名必须是MQ服务器本地的合法操作系统用户,且密码与系统用户密码完全一致(区分大小写)。 - 若测试场景不需要身份校验,可临时将CONNAUTH配置清空后重启队列管理器验证,生产环境不建议该操作。
3. 用户权限显式授权
- 即使用户名密码校验通过,也需要显式授予用户队列管理器的连接权限,以及对应队列的操作权限,授权命令参考:
# 授予队列管理器连接权限 setmqaut -m [队列管理器名称] -t qmgr -p [你传入的用户名] +connect +inq # 授予队列读写权限(按需配置) setmqaut -m [队列管理器名称] -n [队列名称] -t q -p [你传入的用户名] +put +get +inq
4. 代码侧细节检查
- 确认
mq_userName、mq_password变量值没有多余空格、拼写错误,若MQ服务器部署在Windows环境,用户名需要补充域名前缀,格式为域名\用户名,不能仅传入用户名本身。 - 若使用的是低版本IBM MQ .NET托管客户端,可尝试将
MQC.USE_MQCSP_AUTHENTICATION_PROPERTY参数设置为false测试,部分旧版本客户端存在MQCSP认证兼容问题。
内容的提问来源于stack exchange,提问作者Srinivas Nalla
相关产品推荐
相关产品推荐

