说明:
- 本地安装的emqx-5.0.25-windows-amd64.zip 地址:下载 EMQX
- 使用springboot作为示例进行登录
1、登录emqx,打开访问控制->客户端认证,然后创建JWT认证,具体示例配置如下。加密方式使用hmax-based,Secret:eXhx(此字符串为‘yxq’进行base64编码后的字符串)
2、生成JWT密码,可以用两种方式:java和jwt.io网址
2.1:java代码根据上图的规则生成jwt密码,通过执行jwt()方法生成加密密码
import io.jsonwebtoken.*;
public class TestEmqxJWT {
private long time = 1000 * 60 * 60 * 24;
//secret签名:此处是一个字符串转换成base64编码, yxq->eXhx
//emqt中的jwt认证应选择Secret使用Base64编码
private String signature = "eXhx";
@org.junit.Test
public void jwt() {
JwtBuilder jwtBuilder = Jwts.builder();
String jwtToken = jwtBuilder
//header
.setHeaderParam("alg", "HS256")
.setHeaderParam("typ", "JWT")
//payload
.claim("password", "lieh")
// .claim("clientid", "yxq_test")
// .setSubject("lieh")
// .setIssuedAt(Date.from(Instant.now()))
// .setExpiration(new Date(System.currentTimeMillis() + time)) //有效时间1天
// .setId("yxq_test")
//signature
.signWith(SignatureAlgorithm.HS256, signature)
.compact();
System.out.println(jwtToken);
}
@org.junit.Test
public void parse() {
String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXNzd29yZCI6ImxpZWgifQ.kDfiSbXmCEKTdQsqKwjXgsCVUIIntzJ8WmxuCxXjS7M";
JwtParser jwtParser = Jwts.parser();
Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
System.out.println(claims.get("password"));
// System.out.println(claims.get("role"));
// System.out.println(claims.getId());
// System.out.println(claims.getSubject());
// System.out.println(claims.getExpiration());
}
}
####maven--依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.2 网址生成:JSON Web Tokens - jwt.io
3、将生成的密码作为password进行登录,登陆后可以在emqx的客户端查看到当前客户端已登陆,订阅管理可以看到当前客户端订阅的主题。