emqx插件认证功能咨询

emqx版本:5.4
现象:emqx插件开发,on_client_authenticate 优先级设置为HP_LOWEST,jwt认证成功之后,不会触发该hook的调用。
问题:
1、认证链中只要有一种provider认证成功,就不会再调用后续的hook了是吗?
2、如何在hook中调用emqx已有的jwt的认证功能?比如如何获取provider,如何获取provider的config,如何调用对应provider的authenticate方法?

感谢指导!

  1. 是的,只要成功了调用链就会被中断。但如果某个 provider 没找到对应的记录那么一般会继续走后面的调用。
  2. 要获取配置你可以用 emqx:get_config 方法。emqx_authn_jwt 模块是 emqx 里 JWT 认证的实现模块,你可以参考一下。

调用内置的认证方法:

  1. 查看所有启用的认证方式
    emqx_authn_chains:list_authenticators('mqtt:global').
    可以得到所有的认证方式的信息,找到要调用的认证方法,获取其id字段和provider字段,比如 {ok,[#{id => <<"jwt">>,...,provider => emqx_authn_jwt}]}
  2. 获取要使用的authenticator
    {ok,#{state:=State}}=emqx_authn_chains:lookup_authenticator('mqtt:global',<<"jwt">>).
  3. 调用对应模块的认证方法,得到认证结果
    模块名为第一步中获取到的provider的值,ClientInfoon_client_authenticateClientInfo
    emqx_authn_jwt:authenticate(ClientInfo,State).

如此便可调用内置认证模块获得认证结果。