启用 JWT 身份验证
JWT 身份验证提供了一个安全的方式来使用 NanoMQ 的 HTTP 服务。
编译
NanoMQ 中 JWT 作为扩展特性,默认不加入编译目标。可通过设置编译选项 -DENABLE_JWT=ON
启用 JWT。具体步骤,可参考源码编辑安装。
bash
$ cmake -DENABLE_JWT=ON ..
$ make
生成公私钥
签发 JWT 前需要生成一对公私钥, 并注意根据需要修改公钥文件名 (文件名会被自动设置为 Token 载荷中iss
字段的值);
使用 OpenSSL 命令行工具生成 RSA 密钥:
bash
# 生成私钥
$ openssl genrsa -out nanomq.key 2048
# 生成公钥
$ openssl rsa -in nanomq.key -out nanomq.pub -pubout
配置
NanoMQ 的 HTTP 身份验证方式默认使用 Basic
认证,需要在配置文件 nanomq.conf
中修改 auth_type
为 JWT
,并指定 JWT
公钥文件的路径:
启动 NanoMQ
启动 NanoMQ 并指定配置文件
bash
$ nanomq start --conf ./nanomq.conf
如使用 KV 格式配置文件,可通过如下格式启动 NanoMQ
bash
$ nanomq start --conf ./nanomq_old.conf
Token 规则
使用 HTTP 客户端访问 NanoMQ HTTP 服务端前需先生成 Token;
NanoMQ 中所需要的 JWT 结构如下:
bash
header
{
"alg": "RS256",
"typ": "JWT"
}
payload
{
"iss": "nanomq.pub",
"iat": "1683281256",
"exp": "1683283256",
"bodyEncode": "0"
}
头部
- 令牌类型(typ):使用 JWT
- 使用的算法(alg):使用 RS256
载荷
- 签发者(iss):根据需求定义,但要确保与生成的公钥文件名称一致。例如,生成 nanomq.pub 的公钥文件, 则 iss 设置为 "nanomq.pub"
- 签发时间(iat):签发时间
- 过期时间(exp):签发过期时间
生成 Token
使用 JWT 官网工具生成。在 Decoded 中填写:
- Algorithm:RS256
- Header:头部
- Payload:载荷
- Verify Signature:分别填入公私钥
-----BEGIN PUBLIC KEY-----
和-----BEGIN RSA PRIVATE KEY-----
访问 NanoMQ HTTP Server
使用 curl 并填入以上生成的 token 访问 NanoMQ HTTP 服务:
bash
$ curl --location 'http://127.0.0.1:8081/api/v4' \
--header 'Authorization: Bearer {TOKEN}'