emqx连接启用jwt令牌认证jwt令牌概述JWT 即 JSON Web Tokens是一种开放的,用于在两方之间安全地表示声明的行业标准的方法(RFC 7519) 。
组成令牌的形式 xxx.yyy.zzz
eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NjU0Nzc4NjEsInVzZXIiOiJtcXR0LWNsaWVudCIsImlhdCI6MTY2NTQ3Njg2MX0.S9ZrrAk2zmUC2zQ7YNcGwhojLOKV5Bhe3zrMv6rQuzE由三部分组成,先后分别为HEADER、PAYLOAD、VERIFY SIGNATURE简单的说,xxx和yyy是对JSON字符串进行base64加密得到,zzz是由“xxx.yyy”加密得到,最后组装成 xxx.yyy.zzz
HEADERHEADER(头部)由 ALGORITHM(算法) 和 TOKEN TYPE(令牌类型) 组成
{ "alg": "HS256", "typ": "JWT"}xxx由HEADER使用Base64加密得到alg : 表示签名的算法typ : 表示令牌的类型
PAYLOAD【包含hmac-based和public-key emqx启用JWT令牌认证】PAYLOAD(负载)存放一些用户信息,但不能存放敏感信息,因为负载中的信息是公开的yyy由PAYLOAD使用Base64加密得到
VERIFY SIGNATUREVERIFY SIGNATURE(验证签名)zzz由前两部分使用签名加密得到,即对 xxx.yyy 加密,中间连接的“.”是需要的
生成JWT依赖 <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.6.0</version> </dependency>代码
api使用方式是生成JwtBuilder对象 然后调用compact()方法,就能得到JWT.JWT主要由三部分组成,那么代码中同理需要对三部分进行构造,使用api时,主要是对PAYLOAD和VERIFY SIGNATURE进行赋值.Instant now = Instant.now(); Map<String, Object> claims = new HashMap<>(); claims.put("user", "mqtt-client"); String compact = Jwts.builder() .setClaims(claims) // 自定义声明 .setIssuedAt(Date.from(now)) // 对标准中的声明赋值,设置签发时间 .setExpiration(Date.from(now.plusSeconds(1000))) // 对标准中的声明赋值,设置过期时间 .signWith(SignatureAlgorithm.HS256, "NmVlR3l2T3BiQnBXMi9veVBlcTZWaEpES09XTzdoWnM=") // 设置签名 .compact(); System.out.println(compact);tips
- 值得注意的一点是:不要在 setXxx(标准中的声明) 之后调用 setClaims,因为这两个方法会覆盖所有已设置的声明
- PAYLOAD可以分为payload和claims,但是两者既不能都为空也不能都存在,同时只能存在一个,否则将会报错.

文章插图
- 可以不手动设置HEADER,api中会自动设置,当然,自己手动设置HEADER属性也可以
- HEADER中的alg会随构造的签名自动变更
- 关于默认的claims
根据RFC 7519协议标准 我们获取到JWT标准中claims的字段,这些字段是可选的经验总结扩展阅读
- 1.5匹变频空调哪个好 海尔和美的pk一下
- 现在什么牌子电视好 创维TCL海尔和夏普电视推荐
- 55寸海信液晶电视价格 海信和长虹电视哪个好
- 空气净化器哪个好 夏普布鲁雅尔和松下效果好
- 康佳和创维4K电视哪个好 康佳和创维4K电视哪个质量好
- 小米电视4评测 4和4a的区别有哪些呢
- 王者荣耀S29赛季应该怎么搭配出装和铭文
- 小米电视怎么样 小米电视4a和4c哪个好
- 创维和夏普电视哪个好 看过的人都选对了
- 飞利浦吸尘器哪种型号好 飞利浦吸尘器怎么拆卸和安装
