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 : 表示令牌的类型
PAYLOADPAYLOAD(负载)存放一些用户信息,但不能存放敏感信息,因为负载中的信息是公开的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. iss :Issuer,颁发者2. sub : Subject,主题3. aud : Audience,受众4. exp :Expiration Time,过期时间5. nbf :Not Before,不能被接受处理的时间6. iat :Issued At,发布时间7. jti :JWT ID这些claims字段可以根据需要去设置,也可以自己定义claimemqx的安装
根据环境自己选择下载tips
- 如果连接不上服务,建议查看8083端口是否打开
- 如果dashborad无法打开,建议查看18083端口是否打开
HS256("HS256", "HMAC using SHA-256", "HMAC", "HmacSHA256", true)
推荐阅读
- 什么是Scrum?Scrum的核心要点和精髓
- 王者荣耀S29赛季应该怎么搭配出装和铭文
- 苹果处理器a11a12区别_苹果处理器a11和a12区别大吗
- 奔腾处理器和i5哪个好-英特尔奔腾处理器和酷睿i5处理器哪个好
- 小米11和小米10拍照对比_小米11和小米10拍照区别
- 华为手机的质量和做工好不好呢(华为手机寿命一般几年)
- 华为手机怎么样(华为和vivo建议买哪个)
- 和网友怎么一起玩真心话大冒险(两个人在网上怎么玩真心话大冒险)
- dha藻油的作用与功效_dha藻油作用和功效有哪些
- 三星exynos1080和麒麟9000性能对比,哪个好?