EMQX JWT 认证配置 问题 & 解决 (MQTT)

1 篇文章 0 订阅
1 篇文章 0 订阅

项目场景:

EMQX JWT 认证配置


问题描述

配置完成后,得到的 Token 用 MQTTX 客户端验证,报错:无效的用户名或密码(对应英文: invalid username or password)


原因分析:

有两个可能的直接原因:
1 MQTT 服务端配置错误
2 Token 的有效时间超限

还有一些其它原因,比如是否 base256 加密,加密方法选择错误,这些通常不会出现,因为参照的实例代码基本不会有这些问题,如果是自己写的测试代码,可以看看是否是这些其它原因。


解决方案:

首先理解 Token 的验证思路。客户端用 secret 对任意信息(payload)进行加密,生成 Token,MQTT 服务端用这个 secret 验证 token 的签名。比如如果采用 password 模式,客户端传递的 password 是 token,服务器端用 secret 验证 password (token) 的签名是否正确。

1 最典型的 MQTT 服务器配置,一般是选择 JWT 方式, password 模式 – 表示 password 用来验证 Token(username 任意),payload 不作设置
2 Token 的有效时间由 payload 的三个标签控制,三个标签可以不写,那么不写的标签直接验证通过,如果写了,则要验证。三个标签是 exp(expiration time), iat(issued at), nbf(not valid before)。要验证成功,那么 exp 要大于服务器时间,iat 和 nbf 要小于服务器时间。所以要注意服务器的时间要和程序的时间保持一致,否则有可能 iat 和 nbf 的时间大于服务器时间,导致连接失败。


测试工具网站:

JSON Web Tokens


有个帖子的问题:

EMQX JWT认证 java使用方法

这个帖子大部分是没问题,但是关键有个地方有失误,对于指导新人来说不友好,起不到足够的指导作用,之前我就卡壳在这里,所以这里指出来,方便后来人。

在这里插入图片描述
这张图里面,最后一个红色方框的 secret base64 encoded 应该去掉选择框,因为此时 secret 是 base64 的原文 yxq,所以不需要 base64 encoded. 如果是 eXhx,才需要选择这个框。同样,如果配置 Mqtt 服务器的时候如果填的是 yxq,也不需要选择 “secret 需要 base64 编码”。

另外上面图里面的 payload 的 password 不是必需的,可以为空。只有当服务器的 payload 设置了之后,才需要上面图里面的 payload 也要有对应的值,才能验证通过。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值