zergduan commented on issue #8776: URL: https://github.com/apache/rocketmq/issues/8776#issuecomment-2403826076
> Hello @zergduan , please refer to: https://mp.weixin.qq.com/s/g_CUAXrzQ1TQhIDrhX-zkw 感谢您的回复,我参考了您提供的内容找到了问题原因: 问题1. 当 mqadmin 客户端是 NameServer 和 Broker 时(非RocketMQ集群中的节点), mqadmin listacl 可以正常返回结果; 当 mqadmin 客户端不是 NameServer 和 Broker 时(非RocketMQ集群中的节点), mqadmin listacl 返回报错 org.apache.rocketmq.acl.common.AclException: No acl config for rocketmq 结论: 因为我的Broker参数中同时启用了 ACL 1.0 和 ACL 2.0,如下: aclEnable=true authenticationEnabled = true 并且ACL 1.0配置文件plain_acl.yml中将broker和nameserver节点设置到白名单中,且 rocketmq 这个用户并不存在于 plain_acl.yml中;目前测试已知当 ACL 1.0 和 2.0 同时启用时,有如下行为: a. 认证过程同时参考 ACL 1.0 和 2.0 的配置,即: 当mqadmin客户端在ACL 1.0 白名单中时,可以通过认证;当mqadmin客户端不在ACL 1.0白名单和account中,但是在ACL 2.0配置中时,也可以完成认证。 b. 鉴权过程优先使用 ACL 1.0,即: 当访问用户名在ACL 2.0 中有 ACL 配置,但是在 ACL 1.0 中没有 ACL 配置时,此用户无法通过鉴权,会报错 No acl config for <用户名> 问题2. initAuthenticationUser 和 innerClientAuthenticationCredentials 有什么区别? 在使用上有什么不同? 结论: initAuthenticationUser 仅设置于 Broker中,它随Broker启动被创建,默认super类型(最高权限),即此配置为服务端配置; innerClientAuthenticationCredentials 设置于 Broker 和 Proxy 中,即此配置为客户端配置,当 Broker 和 Proxy 访问集群中其它Broker时,将发送这个信息(AK/SK),访问Broker收到此信息后将与ACL配置中的用户对比来完成认证和鉴权。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@rocketmq.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org