写点什么

[Pulsar] 设置 JWT 认证

作者:Zike Yang
  • 2021 年 12 月 02 日
  • 本文字数:1313 字

    阅读完需:约 4 分钟

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=trueauthenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationTokenbrokerClientAuthenticationParameters={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw"}
tokenSecretKey=file:///path/to/secret.keytokenPublicKey=file:///path/to/public.key
复制代码

其中 tokenSecretKey 用来设置对称密钥或者非对称密钥中的私钥;tokenPublicKey 用来设置非对称密钥的公钥。

除此之外,我们还可以设置每个 token 设置项的前缀,这样 JWT 所使用到的 token 设置参数将会附带前缀,如下所示:

tokenSettingPrefix=test_
test_tokenSecretKey=file:///path/to/secret.keytest_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 认证的连接了。

发布于: 15 小时前阅读数: 4
用户头像

Zike Yang

关注

还未添加个人签名 2020.10.20 加入

Apache Pulsar Contributor

评论

发布
暂无评论
[Pulsar] 设置JWT认证