Pulsar Token身份驗證

    一 Token身份驗證概述

    Pulsar支持使用基於JSON Web Tokens(RFC-7519)的安全令牌對客戶端進行身份驗證。

    Tokens用於標識Pulsar客戶端,並與角色關聯,這些角色隨後將被授予執行某些操作的權限(例如:發佈或使用某個主題)。

    管理員通常會給客戶端一個令牌字符串用於連接時使用。

    JWT支持兩種不同的密鑰來生成和效驗令牌

          1 對稱密鑰

             有一個密鑰用於生成令牌和效驗

          2 非對稱密鑰,有一對密鑰,私鑰和公鑰

             私鑰用於生成令牌

             公鑰用於生成效驗

    二  驗證 首先成生超級管理員令牌

         以下使用 對稱密鑰 例子驗證(Pulsar2.4.2版本)

     1  創建密鑰

        $ bin/pulsar tokens create-secret-key --output my-secret.ke

         生成base64編碼的私鑰

        $ bin/pulsar tokens create-secret-key --output  /data/apache-pulsar-2.4.2/my-secret.key --base64

     2 生成令牌(注:首先生成 superUserRoles 角色令牌)

        令牌是與用戶關聯的憑據,關聯是通過角色”來完成的。

        以下命令是給 test-user 角色生成令牌

        bin/pulsar tokens create --secret-key file:///data/apache-pulsar-2.4.2/my-secret.key \

            --subject test-user

       執行此命令後,屏目上會輸出此角色令牌,記錄此令牌,後邊客戶端配置會用到。

        假設生成令牌:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw

      3 Brokers啓用令牌身份驗證

         配置broker.conf

         authenticationEnabled=true

         authorizationEnabled=true

         authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken

         tokenSecretKey=file:///data/apache-pulsar-2.4.2/my-secret.key

         #超級用戶角色,擁有最高權限,多個使用逗號隔開

         superUserRoles=test-user

         brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken

brokerClientAuthenticationParameters=token:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw

         4 重新啓動Broker後,此時Broker服務已啓動Token身份驗證

            執行$ pulsar-admin tenants list命令會提示沒有權限。

         5 配置client.conf 使用命令行工具有權限使用

            authPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken

            #此處配置的令牌是上邊成生的超級管理員令牌

            authParams=token:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw

         6 重新啓動Broker後,命令行工具可以正常使用

         7 java 客戶端驗證      

              PulsarClient client = PulsarClient.builder()

              .serviceUrl("pulsar://192.168.1.48:6650/")

              .authentication(              AuthenticationFactory.token("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.9OHgE9ZUDeBTZs7nSMEFIuGNEX18FLR3qvy8mqxSxXw") .build();

        三 生成一般用戶令牌,給客戶端使用

            1 生成一個新角色(test-user1)令牌               

                bin/pulsar tokens create --secret-key file:///data/apache-pulsar-2.4.2/my-secret.key \

                --subject test-user1

               假設計成生的令牌是(eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIxIn0.HHpjQYfqqdUSN_iAw79qjsPqHyPFvscvGUANvjQNEOo)

            2 授權

               bin/pulsar-admin namespaces grant-permission my-tenant/my-namespace \

               --role test-user1 \

               --actions produce,consume

            3 JAVA 客戶端驗證,發送消息或接收消息正常說明成功               

               PulsarClient client = PulsarClient.builder()

              .serviceUrl("pulsar://192.168.1.48:6650/")

              .authentication(              AuthenticationFactory.token("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIxIn0.HHpjQYfqqdUSN_iAw79qjsPqHyPFvscvGUANvjQNEOo") .build();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章