EMQX 5.0.4 exhook client.authorize 沒有被呼叫

环境信息

  • EMQX 版本:5.0.4
  • 操作系统及版本:macos 11
  • 其他

问题描述

我的 grpc server 有實作了 OnClientAuthorize func ,也確定 emqx 5.0.4 有連接上,在測試 hook 的時候只有 client.authorize 這個一直無法被呼叫,想問有沒有人也遇到問題


这个里面的才会真正启用

1 个赞

我用的是 v2 版本 (client.authorize)

這樣有配置錯嗎?

“client.authenticate” 這個我試過有用

問題就在 client.authorize 這個沒有作用…

看着是没问题的

client.authorize 默认的检查顺序,是

  1. 先检查缓存
  2. 先检查 AuthZ 里面的 ACL File(如果开启了其他的授权器,则会按顺序挨个检查)
  3. 当 AuthZ 里面所有的规则都不 match,才会走到 exhook

所以可以看看 AuthZ 的成功失败的统计,是否直接在这里返回了

./bin/emqx eval "ets:lookup(emqx_hooks, 'client.authorize')"

我從 dashboard 關掉其他的 AuthZ 了,但還是出現

[{hook,'client.authorize',
       [{callback,{emqx_authz,authorize,[[]]},undefined,960}, <--- 這個
        {callback,{emqx_exhook_handler,on_client_authorize,[]},
                  undefined,100}]}]

“AuthZ 的成功失败的统计” 這個要怎麼看?

Dashboard 里面,例如

我的 authorization 全部都刪除了呀 但還是不會走 exhook …

那需要deubg看看了,试试看 ./bin/emqx eval "ets:tab2list(emqx_hooks)"


這張才對

这个看着是对的,看看如果是这样的话,应该会走到你的 grpc 服务才对。

  1. 看看日志有没有什么报错?
  2. 抓包下到 grpc 的请求,看看有没有过去

log 沒有報錯

p.s.
剛剛測試出來以下這種情況會成功走到我的 grpc

  1. 開啟一個 http server authz → response 的 result 寫 ignore
  2. 接著就會走 grpc 的權限驗證

我懷疑是 emqx_authz 預設不是回 ignore,導致擋住整個 flow

1 个赞

@heeejianbo 有辦法把 emqx_authz 完全移除嗎? cofing 檔要怎麼寫? 感謝

  1. 抓包下到 grpc 的请求,看看有没有过去 → 沒有過去

你的猜测是对的 是这里有个bug
https://github.com/emqx/emqx/blob/master/apps/emqx_authz/src/emqx_authz.erl#L367-L380

我们 5.0.6 把它修复掉。感谢反馈

太好了,感謝

看到 5.0.6 發版了,但是這個 bug 還沒修掉?

要等下5.0.7才行,5.0.6 是为了修一个显示问题发的一个紧急版本 大概9月初的时候的版本

了解,感謝