產生資料集

這描述如何使用資料集提供者及其 API 來產生負載測試的資料集。

請勿在生產環境中安裝此提供者,因為其端點未受保護。

先決條件

當使用 Quarkus 或 minikube 安裝時,所有 URL 都以 /realms/master 開始。對於 Wildfly 發行版,URL 以 /auth/realms/master 開始。

使用資料集提供者

腳本化用法

此腳本包含下一節中關於 realm、使用者和用戶端的描述的部分操作。

此腳本假設資料集提供者已按照安裝在 Minikube 上設定中所述安裝,並且可在以下位置存取:
https://keycloak-keycloak.$(minikube ip).nip.io/realms/master/dataset/.

執行以下命令以接收說明描述

./dataset-import.sh -a help

您將看到這些選項

Dataset import to the local minikube Keycloak application - usage:
1) create realm/s with clients, users and password hash algorithm & iterations - run -a (action) with or without other arguments: -a create-realms -r 10 -g argon2 -i 5 -c 100 -u 100 -l 'https://keycloak.url.com'
2) create clients in specific realm: -a create-clients -c 100 -n realm-0 -l 'https://keycloak.url.com'
3) create users in specific realm: -a create-users -u 100 -n realm-0 -l 'https://keycloak.url.com'
4) create events in specific realm: -a create-events -e 100 -n realm-0 -l 'https://keycloak.url.com'
5) create offline sessions in specific realm: -a create-offline-sessions -o 100 -n realm-0 -l 'https://keycloak.url.com'
6) delete specific realm/s with prefix -a delete-realms -p realm -l 'https://keycloak.url.com'
7) dataset provider status -a status 'https://keycloak.url.com'
8) dataset provider status check of last completed job -a status-completed -t 10 -l 'https://keycloak.url.com'
9) dataset provider clear status of last completed job -a clear-status-completed -l 'https://keycloak.url.com'
10) dataset import script usage -a help

建立 10 個新 realm 的範例

./dataset-import.sh -a create-realms -r 10

或者,使用者也可以從 provision/minikube 模組內執行Taskfile 來執行 dataset-import 工作,以無縫地執行 Kubernetes 風格部署的自動化。

dataset-import 工作會重複使用上面定義的命令列引數,以方便使用者。請注意,兩個破折號 (--) 將工作名稱與傳遞給腳本的命令列選項分開。

task dataset-import -- -a create-realms -r 10

若要瞭解有關此工具的更多資訊,請參閱使用工具 task 進行自動化以取得詳細資訊。

資料集提供者 API

建立多個 realm

您需要呼叫此 HTTP REST 請求。此請求對於建立 10 個 realm 非常有用。每個 realm 都將包含指定數量的角色、用戶端、群組和使用者

.../realms/master/dataset/create-realms?count=10

建立多個用戶端

這是要在 realm realm-5 中建立 100 個新用戶端的請求。每個用戶端都將啟用服務帳戶,並具有類似「client_id」-secret 的密碼(例如,如果用戶端是 client-156,則密碼為 client-156-secret

.../realms/master/dataset/create-clients?count=200&realm-name=realm-5

您還可以配置存取類型 (bearer-onlyconfidentialpublic) 以及用戶端是否應為具有這兩個參數的服務帳戶用戶端

...&client-access-type=bearer-only&service-account-client=false

建立多個使用者

這是要在 realm-5 中建立 500 個新使用者的請求。每個使用者都將擁有指定數量的角色、用戶端角色和群組,這些角色、用戶端角色和群組已由 create-realms 端點建立。每個使用者都將具有類似「使用者名稱」-password 的密碼。例如,user-156 將具有類似 user-156-password 的密碼

.../realms/master/dataset/create-users?count=1000&realm-name=realm-5

建立多個群組

群組是作為 realm 建立的一部分而建立的。可以使用以下參數來管理群組的數量和已建立群組的結構

groups-per-realm

每個 realm 的群組總數。預設值為 20

groups-with-hierarchy

truefalse,預設值為 false。使用預設值時,僅會建立最上層的群組。將 groups-with-hierarchy 設定為 true 時,會建立群組的樹狀結構;樹的深度由參數 groups-hierarchy-depth 定義,而 groups-count-each-level 則定義每個已建立群組將擁有多少個子群組。

groups-hierarchy-depth

群組樹狀結構的深度。預設值為 3。使用預設值時,最上層的群組將擁有 groups-count-each-level 個子群組,而每個子群組本身將擁有 groups-count-each-level 個子群組。只有當 groups-with-hierarchytrue 時,此參數才會有效。

groups-count-each-level

每個已建立群組將擁有的子群組數量。只有當 groups-with-hierarchytrue 時,此參數才會有效。

使用預設值時,僅會建立最上層的群組。將 groups-with-hierarchy 設定為 true 時,會忽略 groups-per-realm 參數,並根據其他參數定義來建立群組樹狀結構。groups-count-each-levelgroups-hierarchy-depth 將會是建立的群組總數。階層式群組實作會遵循 groups-per-transaction。採用的子群組命名慣例會在群組名稱中使用點 (.),即使它是在先前的交易中建立的,也可以找到父群組。

範例參數
.../realms/master/dataset/create-realms?count=1&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=50

您也可以透過叫用 create-groups 端點並設定 realm-name 參數,在現有的 realm 中建立群組

範例參數
.../realms/master/dataset/create-groups?realm-name=realm-0&count=10&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=5

建立多個事件

這是要在具有前置詞 realm- 的可用 realm 中建立 10M 個新事件的請求。例如,如果我們有 100 個 realm,例如 realm-0realm-1、... realm-99,則它會在它們中隨機建立 10M 個事件

.../realms/master/dataset/create-events?count=10000000

建立多個離線工作階段

這是要在具有前置詞 realm- 的可用 realm 中建立 10M 個新離線工作階段的請求。例如,如果我們有 100 個 realm,例如 realm-0realm-1、... realm-99,則它會在它們中隨機建立 10M 個事件

.../realms/master/dataset/create-offline-sessions?count=10000000

移除多個 realm

移除具有預設 realm 前置詞 realm 的所有 realm

.../realms/master/dataset/remove-realms?remove-all=true

您可以使用 realm-prefix 來變更預設的 realm 前置詞。您可以使用參數來移除所有 realm,例如,僅從 foorealm5foorealm15

.../realms/master/dataset/remove-realms?realm-prefix=foorealm&first-to-remove=5&last-to-remove=15

變更預設參數

若要變更參數,請參閱DataSetConfig 類別,以查看可用的參數、預設值以及哪個端點適用於哪個特定參數。例如,若要使用前置詞 foo 和僅用於密碼原則的 1000 次雜湊反覆運算 (使用預設雜湊演算法) 來建立 realm,您可以使用這些參數

.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-iterations=1000

另一個範例是,使用以下參數指定特定的雜湊演算法與雜湊反覆運算的組合

.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-algorithm=argon2&password-hash-iterations=1000

當觸發 HTTP 端點時,組態會寫入伺服器記錄檔,因此您可以監控進度以及實際套用的參數。

請注意,建立新物件將會自動從下一個可用的索引開始。例如,當您觸發上述端點以建立多個用戶端,而且您的資料庫中已存在 230 個用戶端 (client-0client-1、.. client-229) 時,您的 HTTP 請求將會開始從 client-230 建立用戶端。

檢查工作是否仍在執行

使用 GET 方法呼叫以下 URL

.../realms/master/dataset/status

如果仍有工作正在執行,它會傳回如下資訊

{"status":"Task in progress","task-id":{"startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-6 to realm-6"}}

如果沒有工作正在執行,它會傳回如下資訊

{"status":"No task in progress. New task can be started"}

檢查上次完成的工作的結果

使用 GET 方法呼叫以下 URL

.../realms/master/dataset/status-completed

如果仍有工作正在執行,它會傳回如下資訊

{"status":"previous task completed","task":{"success":"true","startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-1 to realm-1","endTimeMs":"1662115173323"}}

如果沒有已完成的工作,則會傳回此資訊,狀態碼為 404

{"status":"No completed task"}

清除上次完成的工作的結果

使用 DELETE 方法呼叫以下 URL

.../realms/master/dataset/status-completed

檢查特定物件的最後項目

查看最後建立的 realm 索引

.../realms/master/dataset/last-realm

查看指定 realm 中最後建立的用戶端

.../realms/master/dataset/last-client?realm-name=realm5

查看指定 realm 中最後建立的使用者

.../realms/master/dataset/last-user?realm-name=realm5

佈建組織

在佈建組織之前,請務必手動建立或佈建 realm。例如,按如下方式佈建 realm-0 realm

.../realms/master/dataset/create-realms?count=1&users-per-realm=5000

因此,您擁有一個包含 5k 個使用者的 realm realm-0

這是要在具有前置詞 org- 的 realm 中建立 1000 個組織的請求

.../realms/realm-0/dataset/orgs/create?count=1000

或者,您可以建立具有指定名稱的單一組織

realms/realm-0/dataset/orgs/create?name=myorg.com&domains=myorg.com,myorg.org,myorg.net&count=1

您還可以指定應連結到每個建立的組織的成員(受管理和不受管理)數量和身分提供者數量

.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10

因此,1k 個組織具有以下配置

  • 500 個不受管理的成員

  • 10 個身分提供者

也可以指定每個身分提供者的身分提供者對應器的數量

.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10&identity-provider-mappers-count=3

在此情況下,1k 個組織每個都有 500 個不受管理的成員、10 個身分提供者,以及每個身分提供者都有 3 個身分提供者對應器

您也可以將資料佈建到特定的組織。例如,若要將更多身分提供者佈建到特定的組織

.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000

您可以選擇性地指定每個身分提供者的身分提供者對應器的數量

.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000&identity-provider-mappers-count=5

或將更多不受管理的成員佈建到特定的組織

.../realms/realm-0/dataset/orgs/org-0/members/create-unmanaged?count=100

或將更多受管理的成員佈建到特定的組織

.../realms/realm-0/dataset/orgs/org-0/members/create-managed?count=100

佈建成員時,請確保您已在 realm 中建立足夠的使用者。對於受管理的成員,您也需要至少一個連結到組織的身分提供者。

如果要移除組織

.../realms/realm-0/dataset/orgs/org-0/remove

延伸閱讀