JSON Web Token(RFC-7519)是 Web 服务中常用的一种认证方案,简称 JWT 认证。JWT 基于一个 token 字符串来识别用户身份。

认识 token

一个 JWT 的 token 串包含三个部分(Header.Payload.Signature,通过点来分隔):

Untitled

我们可以使用 https://jwt.io/ 或任意 base64 解密工具查看 header 和 payload 部分。

<aside> 💡 JWT 得益于其简单有效,得到广泛应用。但也由于 JWT token 串携带了部分诸如用户名等明文信息,因此仅适用于对安全要求适中的环境。

</aside>

Pulsar 中的 JWT

Pulsar 使用标准的 io.jsonwebtoken 库支持使用 JWT 做身份认证,同时也提供了 JWT 客户端,可以方便的制作密钥和生成 token。

最佳实践

基于 JWT 的特性,在 Pulsar 中使用需要注意的几个点:

  1. 使用 JWT 可以做认证和授权,但数据仍然处于暴露状态,在安全要求较高的环境,建议开启 TLS 对数据传输加密(会牺牲一小部分性能),以进一步巩固安全。
  2. JWT 最重要的特性是不需要借助第三方服务(例如 Kerberos 之于 KDC),凭借 JWT 内容本身,就能验证 token 是否有效。这也带来一个问题,即 token 一旦签发,在有效期间将会一直有效,无法撤回。因此对于执行某些重要操作的 token,有效期要尽量设置的短。
  3. Pulsar 支持 2 种 JWT 加密方式,即使用对称秘钥(secret key)和使用非对称密钥(private/public key),选择其中一个即可。
  4. Token 的配置容易出错用户(例如需要操作 pulsar-admin 但仅给了test-user 的 token),建议配置后可使用 validate 命令做验证。
  5. Pulsar Broker 会缓存客户端的认证信息,并会在一个固定时间(默认 60 秒)来检查每个连接的认证是否过期,这个刷新时间可以配置 broker.conf 中的 authenticationRefreshCheckSeconds 参数来自定义。

配置 Pulsar 使用 JWT 认证

注意 Pulsar 提供了使用对称密钥(secret key)和使用非对称密钥(private/public key)两种方式,可根据安全强度要求选择其中一个即可。

提示

方案 1:使用对称密钥(secret key)

方案 2:使用非对称密钥(private/public key)

常见问题