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 服务器获取到访问令牌。

    1. curl --request POST \
    2. --url https://dev-kt-aa9ne.us.auth0.com \
    3. --header 'content-type: application/json' \
    4. --data '{
    5. "client_id":"Xd23RHsUnvUlP7wchjNYOaIfazgeHd9x",
    6. "client_secret":"rT7ps7WY8uhdVuBTKWZkttwLdQotmdEliaM5rLfmgNibvqziZ-g07ZH52N_poGAb",
    7. "grant_type":"client_credentials"}'

    在上面的例子中,映射关系如下所示:

    • 此插件中 issuerUrl参数映射到--url https://dev-kt-aa9ne.us.auth0.com
    • 此插件中privateKey 文件参数至少包含client_idclient_secret 两个字段。
    • 此插件中 参数映射到audience":"https://dev-kt-aa9ne.us.auth0.com/api/v2/"

    你可以在以下的 Pulsar 客户端中使用 Oauth2 认证。

    Java

    你可以在 Pulsar Java 客户端中使用工厂方法配置身份认证操作。

    1. String issuerUrl = "https://dev-kt-aa9ne.us.auth0.com";
    2. String credentialsUrl = "file:///path/to/KeyFile.json";
    3. String audience = "https://dev-kt-aa9ne.us.auth0.com/api/v2/";
    4. PulsarClient client = PulsarClient.builder()
    5. .serviceUrl("pulsar://broker.example.com:6650/")
    6. .authentication(
    7. AuthenticationFactoryOAuth2.clientCredentials(issuerUrl, credentialsUrl, audience))
    8. .build();

    此外,你也可以在 Pulsar 客户端中使用编码参数来配置身份认证。

    C++ 客户端和 Java 客户端类似。 你必须提供issuerUrlprivate_key(凭据文件路径)和 audience 三个参数。

    1. #include <pulsar/Client.h>
    2. pulsar::ClientConfiguration config;
    3. std::string params = R"({
    4. "issuer_url": "https://dev-kt-aa9ne.us.auth0.com",
    5. "private_key": "../../pulsar-broker/src/test/resources/authentication/token/cpp_credentials_file.json",
    6. "audience": "https://dev-kt-aa9ne.us.auth0.com/api/v2/"})";
    7. config.setAuth(pulsar::AuthOauth2::create(params));

    Go client

    1. oauth := pulsar.NewAuthenticationOAuth2(map[string]string{
    2. "type": "client_credentials",
    3. "issuerUrl": "https://dev-kt-aa9ne.us.auth0.com",
    4. "audience": "https://dev-kt-aa9ne.us.auth0.com/api/v2/",
    5. "privateKey": "/path/to/privateKey",
    6. "clientId": "0Xx...Yyxeny",
    7. })
    8. URL: "pulsar://my-cluster:6650",
    9. Authentication: oauth,
    10. })

    Python client

    如果要在 Python 客户端中启用 OAuth2 认证,需要先配置 OAuth2 认证信息。 如下是一个在 Python 客户端中配置 OAuth2 认证的示例。

    本节介绍如何使用 Pulsar CLI 工具通过 OAuth2 身份验证插件连接到 Pulsar 集群。

    以下示例展示了,如何使用 pulsar-admin 命令通过 OAuth2 身份验证插件连接到 Pulsar 集群。

    1. bin/pulsar-admin --admin-url https://streamnative.cloud:443 \
    2. --auth-plugin org.apache.pulsar.client.impl.auth.oauth2.AuthenticationOAuth2 \
    3. --auth-params '{"privateKey":"file:///path/to/key/file.json",
    4. "issuerUrl":"https://dev-kt-aa9ne.us.auth0.com",
    5. "audience":"https://dev-kt-aa9ne.us.auth0.com/api/v2/"}' \
    6. tenants list

    admin-url 参数设置成 Web 服务的URL。 Web 服务 URL 由三部分组成: 协议,主机名,端口。例如:pulsar://localhost:6650。 基于配置的 Key 文件设置 privateKey, issuerUrl, and audience 参数的值。 了解更多详情, 请参考 认证类型 .

    pulsar-client

    以下示例展示了,如何使用 pulsar-client 命令通过 OAuth2 身份验证插件连接到 Pulsar 集群。

    1. bin/pulsar-client \
    2. --url SERVICE_URL \
    3. --auth-plugin org.apache.pulsar.client.impl.auth.oauth2.AuthenticationOAuth2 \
    4. --auth-params '{"privateKey":"file:///path/to/key/file.json",
    5. "issuerUrl":"https://dev-kt-aa9ne.us.auth0.com",
    6. "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 参数的值。 了解更多详情, 请参考 认证类型 .