Client authentication using OAuth 2.0 access tokens
这个模块用于支持 OAuth 2.0 的 Pulsar 客户端认证插件。 在与 Oauth 2.0 服务端发起通信后,Pulsar 会从 Oauth 2.0 服务端获取到。然后将这个访问令牌
传递给 Pulsar broker 进行身份认证。 默认情况下,Broker 可以配置使用 org.apache.pulsar.broker.authentication.AuthenticationProviderToken
来进行认证。 或者你可以添加你自己的AuthenticationProvider
来进行认证。
这个库允许你使用从OAuth 2.0 认证服务器获取的访问令牌,来认证 Pulsar 客户端。身份认证服务是一个令牌发行者。
认证类型决定如何通过 OAuth 2.0 授权流程获取访问令牌。
Note
客户端凭据
以下表格是 客户端凭据
认证类型支持的参数列表。
凭据文件包含客户端认证类型使用的服务帐户凭据。 以下是一个凭据文件 credentials_file.json
示例:
典型的 OAuth2 请求映射
如下是一个典型的 Oauth2 请求,用于从 Oauth2 服务器获取到访问令牌。
curl --request POST \
--url https://dev-kt-aa9ne.us.auth0.com \
--header 'content-type: application/json' \
--data '{
"client_id":"Xd23RHsUnvUlP7wchjNYOaIfazgeHd9x",
"client_secret":"rT7ps7WY8uhdVuBTKWZkttwLdQotmdEliaM5rLfmgNibvqziZ-g07ZH52N_poGAb",
"grant_type":"client_credentials"}'
在上面的例子中,映射关系如下所示:
- 此插件中
issuerUrl
参数映射到--url https://dev-kt-aa9ne.us.auth0.com
。 - 此插件中
privateKey
文件参数至少包含client_id
和client_secret
两个字段。 - 此插件中 参数映射到
audience":"https://dev-kt-aa9ne.us.auth0.com/api/v2/"
。
你可以在以下的 Pulsar 客户端中使用 Oauth2 认证。
Java
你可以在 Pulsar Java 客户端中使用工厂方法配置身份认证操作。
String issuerUrl = "https://dev-kt-aa9ne.us.auth0.com";
String credentialsUrl = "file:///path/to/KeyFile.json";
String audience = "https://dev-kt-aa9ne.us.auth0.com/api/v2/";
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://broker.example.com:6650/")
.authentication(
AuthenticationFactoryOAuth2.clientCredentials(issuerUrl, credentialsUrl, audience))
.build();
此外,你也可以在 Pulsar 客户端中使用编码参数来配置身份认证。
C++ 客户端和 Java 客户端类似。 你必须提供issuerUrl
、private_key
(凭据文件路径)和 audience 三个参数。
#include <pulsar/Client.h>
pulsar::ClientConfiguration config;
std::string params = R"({
"issuer_url": "https://dev-kt-aa9ne.us.auth0.com",
"private_key": "../../pulsar-broker/src/test/resources/authentication/token/cpp_credentials_file.json",
"audience": "https://dev-kt-aa9ne.us.auth0.com/api/v2/"})";
config.setAuth(pulsar::AuthOauth2::create(params));
Go client
oauth := pulsar.NewAuthenticationOAuth2(map[string]string{
"type": "client_credentials",
"issuerUrl": "https://dev-kt-aa9ne.us.auth0.com",
"audience": "https://dev-kt-aa9ne.us.auth0.com/api/v2/",
"privateKey": "/path/to/privateKey",
"clientId": "0Xx...Yyxeny",
})
URL: "pulsar://my-cluster:6650",
Authentication: oauth,
})
Python client
如果要在 Python 客户端中启用 OAuth2 认证,需要先配置 OAuth2 认证信息。 如下是一个在 Python 客户端中配置 OAuth2 认证的示例。
本节介绍如何使用 Pulsar CLI 工具通过 OAuth2 身份验证插件连接到 Pulsar 集群。
以下示例展示了,如何使用 pulsar-admin 命令通过 OAuth2 身份验证插件连接到 Pulsar 集群。
bin/pulsar-admin --admin-url https://streamnative.cloud:443 \
--auth-plugin org.apache.pulsar.client.impl.auth.oauth2.AuthenticationOAuth2 \
--auth-params '{"privateKey":"file:///path/to/key/file.json",
"issuerUrl":"https://dev-kt-aa9ne.us.auth0.com",
"audience":"https://dev-kt-aa9ne.us.auth0.com/api/v2/"}' \
tenants list
admin-url
参数设置成 Web 服务的URL。 Web 服务 URL 由三部分组成: 协议,主机名,端口。例如:pulsar://localhost:6650
。 基于配置的 Key 文件设置 privateKey
, issuerUrl
, and audience
参数的值。 了解更多详情, 请参考 认证类型 .
pulsar-client
以下示例展示了,如何使用 pulsar-client 命令通过 OAuth2 身份验证插件连接到 Pulsar 集群。
bin/pulsar-client \
--url SERVICE_URL \
--auth-plugin org.apache.pulsar.client.impl.auth.oauth2.AuthenticationOAuth2 \
--auth-params '{"privateKey":"file:///path/to/key/file.json",
"issuerUrl":"https://dev-kt-aa9ne.us.auth0.com",
"audience":"https://dev-kt-aa9ne.us.auth0.com/api/v2/"}' \
admin-url
参数设置成 Web 服务的URL。 Web 服务 URL 由三部分组成: 协议,主机名,端口。例如:pulsar://localhost:6650
。 基于配置的 Key 文件设置 privateKey
, issuerUrl
, and audience
参数的值。 了解更多详情, 请参考 认证类型 .
pulsar-perf
admin-url
参数设置成 Web 服务的URL。 Web 服务 URL 由三部分组成: 协议,主机名,端口。例如:pulsar://localhost:6650
。 基于配置的 Key 文件设置 privateKey
, issuerUrl
, and 参数的值。 了解更多详情, 请参考 认证类型 .