JWT 认证

    插件:

    客户端使用 Token 作为用户名或密码(取决于插件配置),发起连接时 EMQX 使用配置中的密钥、证书进行解密,如果能成功解密则认证成功,否则认证失败。

    默认配置下启用 JWT 认证后,你可以通过任意用户名+以下密码进行连接:

    JWT 身份验证插件可以从身份验证令牌中提取 ACL 规则。 后面会用到这些 ACL 规则 授权客户的发布/订阅操作。 请参阅 JWT ACL

    客户端携带 JWT 的位置,用于配置客户端 JWT 字符串携带位置,可选 username 与 password。

    auth.jwt.verify_claims

    如果你启用了 auth.jwt.verify_claims 选项,认证插件在验证 JWT 有效性之后还会进一步验证 Payload 中的数据有效性。

    假设你的 Payload 为:

    你可以使用如下配置,当客户端携带此 Token 时,将验证客户端 username 是否等于

    • %c:当前客户端 client id

    JWT 认证支持以三种方式配置密钥,这三种方式分别对应三种类型的算法支持:

    • auth.jwt.secret:对称加密的方式,验证 JWT 的 Token 字段。它支持的算法有:

      • HS256 - HMAC,使用 SHA-256 哈希算法。
      • HS384 - HMAC,使用 SHA-384 哈希算法。
      • HS512 - HMAC,使用 SHA-512 哈希算法。
    • auth.jwt.pubkey:使用非对称加密的方式,验证 JWT 的 Token 字段。它支持的算法有:

      • RS384 - RSA,使用 SHA-384 哈希算法。
      • RS512 - RSA,使用 SHA-512 哈希算法。
      • ES256 - ECDSA,使用 P-256 曲线。
      • ES384 - ECDSA,使用 P-384 曲线。
      • ES512 - ECDSA,使用 P-512 曲线。
    • :配置为 服务器地址,从 JWKs 服务器中获取可用的密钥列表。

    该三类密钥允许同时配置。EMQX 在验证 Token 时会按 auth.jwt.secretauth.jwt.pubkey, 顺序检查。

    JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限,使用 JWT 时建议启用 TLS 加密传输。 JWT 使用过程中无法在过期前废止某个 Token,请妥善设置有效时长并保管好密钥等加密信息。