JWT 认证指的是客户端利用 token 作为认证参数,在和 Pulsar 通信的时候带上 token,使用 pulsar 证明身份。本文介绍如何在 Pulsar 上设置 JWT 认证。
生成密钥
我们首先需要生成用于加密 token 的密钥,Pulsar 支持两种加密方式的密钥:对称加密和非对称加密,这些密钥将用于后续的 token 生成。
我们可以使用下面的指令来生成对称密钥:
bin/pulsar tokens create-secret-key --output my-secret.key
复制代码
或者使用下列的指令来生成 base64 的对称密钥:
bin/pulsar tokens create-secret-key --output /opt/my-secret.key --base64
复制代码
对于非对称密钥,我们可以使用下面的指令来生成:
bin/pulsar tokens create-key-pair --output-private-key my-private.key --output-public-key my-public.key
复制代码
生成 token
我们需要生成 token 供用户使用,在生成 token 的时候,我们需要指定所使用的密钥、客户端的角色,除此之外,我们还可以指定 token 的有效时间(可选项)。
对于对称密钥,我们可以使用下面的指令来生成 token
bin/pulsar tokens create --secret-key file:///path/to/my-secret.key \
--subject test-user
复制代码
生成的 token 的角色将是 test-user
而对于非对称密钥,我们可以使用下面的指令:
bin/pulsar tokens create --private-key file:///path/to/my-private.key \
--subject test-user
--expiry-time 1y
复制代码
如上面所示,我们可以使用 expriy-time 可选参数指定 token 的有效时间。
Broker 设置
在 Broker 中,我们需要开启认证功能(默认是关闭的),同时要设置为使用 JWT 的认证方式。除此之外,因为 Broker 本身也需要创建 PulsarClient 进行通信,所以我们需要为 Broker 的 client 设置相应的认证方式和认证参数等。设置参数如下:
authenticationEnabled=true
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
brokerClientAuthenticationParameters={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw"}
tokenSecretKey=file:///path/to/secret.key
tokenPublicKey=file:///path/to/public.key
复制代码
其中 tokenSecretKey 用来设置对称密钥或者非对称密钥中的私钥;tokenPublicKey 用来设置非对称密钥的公钥。
除此之外,我们还可以设置每个 token 设置项的前缀,这样 JWT 所使用到的 token 设置参数将会附带前缀,如下所示:
tokenSettingPrefix=test_
test_tokenSecretKey=file:///path/to/secret.key
test_tokenPublicKey=file:///path/to/public.key
复制代码
我们设置了 test_作为前缀,那么下面的两个 token 设置参数的前缀都需要添加 test_。
客户端设置
如在 Java 客户端中,我们在创建 PulsarClient 的时候需要设置 token 参数,如下:
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://broker.example.com:6650/")
.authentication(
AuthenticationFactory.token("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY"))
.build();
复制代码
至此,我们就能使用 JAVA 客户端和 Broker 建立 token 认证的连接了。
评论