在我们的堆栈中,我们有一个Keycloak,它为我们的系统生成JWT令牌。我们配置了Keycloak,将每个用户所需的RabbitMQ访问权限添加到JWT的scope
部分(每个用户属于一个客户组,每个客户都有一个单独的vhost):
"scope": "email profile rabbitmq.write:customer1/*/* rabbitmq.read:customer1/*/*"
字符串
问题是,当我们尝试从前端(使用stomp)连接到RMQ时,我们在RMQ日志中看到以下错误:
2023-08-02 12:26:51.471470+00:00 [erro] <0.7933.0> STOMP error frame sent:
2023-08-02 12:26:51.471470+00:00 [erro] <0.7933.0> Message: access_refused
2023-08-02 12:26:51.471470+00:00 [erro] <0.7933.0> Detail: "ACCESS_REFUSED - access to queue 'stomp-subscription-0wa7v-Ameof5juowM_5T1g' in vhost 'customer1' refused for user '14485fee-4180-454e-8137-befaec745577'"
型
我不明白为什么该用户没有访问该队列的权限。在JWT令牌中提到用户可以访问该vhost中的所有队列和交换,为什么现在我的访问被拒绝?
顺便说一句,我们使用oauth_2后端插件。
1条答案
按热度按时间nnvyjq4y1#
经过更多的调查,我发现,由于STOMP在RMQ中的实现方式,除了
read
和write
之外,用户还需要rabbitmq.configure
访问权限,在给予用户configure
访问权限后,我能够访问RMQ上的数据。