Pulsar 中使用 JWT 进行身份认证
欢迎阅读 Pulsar 开源书籍《Pulsar入门与实践》
更好的阅读体验,请参考在线版本《使用 JWT 进行身份认证》
Pulsar 使用标准的 io.jsonwebtoken 库支持使用 JWT 做身份认证,同时也提供了 JWT 客户端,可以方便的制作密钥和生成 token。
JWT 简介
JSON Web Token(RFC-7519)是在 Web 应用中常用的一种认证方案。形式上这个 token 只是一个 JSON 字符串,并做了 base64url 编码和签名。
一个 JWT 的 token 字符串包含三个部分,例如:xxxxx.yyyyy.zzzzz(通过点来分隔):
- Header(下图中红色部分):内容是一个 JSON 串,主要指定签名算法(Pulsar 中默认使用 HS256),使用 base64url 编码。
- Payload(下图中紫色部分):内容也是一个 JSON 串,主要指定用户名(sub)和过期时间,也是用 base64url 编码。
- Signature(下图蓝色部分):内容由使用特定算法,计算编码后的 Header 和 Payload 加一个 secret 值而来。签名保证了 token 不被中途篡改。
# 一个使用 HMAC SHA256 算法的签名示例
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
token 内容的查看和验证

我们可以去 https://jwt.io/ 查看 Token 的组成内容,或者使用任意 base64 解密工具查看 header 和 payload 部分。
Pulsar 客户端也提供了验证功能:
-
bin/pulsar tokens show: 查看 token 的 header 和 payload:
bin/pulsar tokens show -i eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIiLCJleHAiOjE2NTY3NzYwOTh9.awbp6DreQwUyV8UCkYyOGXCFbfo4ZoV-dofXYTnFXO8 { "alg":"HS256"} --- { "sub":"test-user","exp":1656776098} -
bin/pulsar tokens validate:使用 secret key 或者 public key 验证 token:
bin/pulsar tokens validate -pk /Users/futeng/workspace/github/futeng/pulsar-pseudo-cluster/pulsar-1/my-public.key -i "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.ijp-Qw4JDn1aOQbYy4g4YGBbXYIgLA9lCVrnP-heEtPCdDq11_c-9pQdQwc6RdphvlSfoj50qwL5OtmFPysDuF2caSYzSV1kWRWN-tFzrt-04_LRN-vlgb6D06aWubVFJQBC4DyS-INrYqbXETuxpO4PI9lB6lLXo6px-SD5YJzQmcYwi2hmQedEWszlGPDYi_hDG9SeDYmnMpXTtPU3BcjaDcg9fO6PlHdbnLwq2MfByeIj-VS6EVhKUdaG4kU2EJf5uq2591JJAL5HHiuTZRSFD6YbRXuYqQriw4RtnYWSvSeVMMbcL-JzcSJblNbMmIOdiez43MPYFPTB7TMr8g" { sub=admin}
Pulsar 中使用 JWT 的几个注意点
基于 JWT 的特性,在 Pulsar 中使用需要注意的几个点:
- 使用 JWT 可以做认证和授权,但数据仍然处于暴露状态,在安全要求较高的环境,建议开启 TLS 对数据传输加密(会牺牲一小部分性能),以进一步巩固安全。
- JWT 最重要的特性是不需要借助第三方服务(例如 Kerberos 之于 KDC),凭借 JWT 内容本身,就能验证 token 是否有效。这也带来一个问题,即 token 一旦签发,在有效期间将会一直有效,无法撤回。因此对于执行某些重要操作的 token,有效期要尽量设置的短。
- Pulsar 支持 2 种 JWT 加密方式,即使用对称秘钥(secret key)和使用非对称密钥(private/public key),选择其中一个即可。
- Token 的配置容易出错用户(例如需要操作 pulsar-admin 但仅给了test-user 的 token),建议配置后可使用 validate 命令做验证。
- Pulsar Broker 会缓存客户端的认证信息,并会在一个固定时间(默认 60 秒)来检查每个连接的认证是否过期,这个刷新时间可以配置 broker.conf 中的 authenticationRefreshCheckSeconds 参数来自定义。
配置 JWT
注意 Pulsar 提供了使用对称密钥(secret key)和使用非对称密钥(private/public key)两种方式,可根据安全强度要求选择其中一个即可。
提示:
-
Pulsar 中既可以对 broker 的访问做 JWT 认证,也可以对 bookie 的访问做 JWT 认证。两者配置方式类似,本文重点在于区分两种密钥配置的不同,因此将仅针对 broker 对配置做说明。
-
token 参数的配置,既可使用字符串形式,也可以使用文件形式,可择优选择。
# 字符串形式 brokerClientAuthenticationParameters={ "token"

Apache Pulsar 支持使用JWT进行身份认证,包括对称密钥和非对称密钥两种方式。JWT包含Header、Payload和Signature三部分,可以通过jwt.io在线查看和验证。在Pulsar中,配置JWT认证涉及brokerClientAuthenticationParameters、tokenSecretKey或tokenPublicKey等参数。此外,要注意JWT一旦签发,在有效期内将一直有效,无法撤销,因此需谨慎设置有效期和权限。通过pulsar-admin工具,可以进行权限的授予和撤销。
最低0.47元/天 解锁文章
2305

被折叠的 条评论
为什么被折叠?



