Chuyển đến nội dung chính

レッスン 4: ユーザー、グループ、およびユーザー プロファイルの管理

ユーザーの作成と管理、認証情報の設定、ユーザー属性スキーマ、ユーザー プロファイル構成、カスタム属性とバリデーター、グループとサブグループの作成、グループ属性、グループ ロール マッピング、ユーザーの自己登録、必要なアクション、偽装と個人データの管理。

Keycloak Users, Groups, Roles Hierarchy

Keycloakレルムのユーザー、グループ、ロールの階層モデル

1. ユーザーの管理

ユーザーはKeycloakの中心的なエンティティであり、システムにログインできるユーザーを表します。各ユーザーは特定のレルムに属し、属性、資格情報、ロール、グループ メンバーシップを持つことができます。

1.1 管理コンソールからユーザーを作成する

  1. レルムを選択します (例:私の会社) レルムセレクターから

  2. クリックユーザーサイドバーにある

  3. クリックユーザーを追加する

  4. 情報を入力してください:

    • ユーザー名: ジョン・ドゥ(必須)
    • 電子メール: [email protected]
    • ファーストネーム: ジョン
    • 苗字: ドウ
    • メール認証済み:ON(メール認証済みの場合)
    • 有効: の上
  5. クリック作成する

1.2 管理 CLI によるユーザーの作成

# Tạo user cơ bản
bin/kcadm.sh create users \
  -r my-company \
  -s username=john.doe \
  -s [email protected] \
  -s firstName=John \
  -s lastName=Doe \
  -s enabled=true \
  -s emailVerified=true

Lấy user ID vừa tạo

USER_ID=$(bin/kcadm.sh get users -r my-company -q username=john.doe --fields id --format csv --noquotes)

echo "User ID: $USER_ID"

1.3 REST API経由でユーザーを作成する

# Tạo user mới
curl -s -X POST \
  "http://localhost:8080/admin/realms/my-company/users" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "john.doe",
    "email": "[email protected]",
    "firstName": "John",
    "lastName": "Doe",
    "enabled": true,
    "emailVerified": true,
    "attributes": {
      "department": ["Engineering"],
      "employee_id": ["EMP001"]
    }
  }'

Lấy user ID từ response header Location

Location: http://localhost:8080/admin/realms/my-company/users/{user-id}

2. 資格情報を設定する

2.1 管理コンソールからパスワードを設定する

  1. 入力ユーザー→ ユーザーを選択 → タブ資格

  2. クリックパスワードを設定する

  3. 新しいパスワードを入力してください

  4. 一時的:ON(初回ログイン時にパスワード変更が必要)またはOFF(パスワード固定)

  5. クリック保存

2.2 CLI 経由でパスワードを設定する

# Đặt password cố định
bin/kcadm.sh set-password \
  -r my-company \
  --username john.doe \
  --new-password "SecureP@ssw0rd!"

Đặt password tạm thời (bắt đổi khi login)

bin/kcadm.sh set-password
-r my-company
--username john.doe
--new-password "TempP@ss123"
--temporary

2.3 REST API経由でパスワードを設定する

# Lấy user ID
USER_ID=$(curl -s -X GET \
  "http://localhost:8080/admin/realms/my-company/users?username=john.doe" \
  -H "Authorization: Bearer $ACCESS_TOKEN" | jq -r '.[0].id')

Đặt password

curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID/reset-password"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
-d '{ "type": "password", "value": "SecureP@ssw0rd!", "temporary": false }'

2.4 パスワードポリシー

レルムのパスワード ポリシーを構成します。認証 → ポリシー → パスワードポリシー:

ポリシー説明する値の例
最小長さ最小長さ8
大文字大文字が必要です1
小文字小文字が必要です1
数字リクエスト番号1
特殊文字特殊文字が必要です1
ユーザー名ではありませんパスワードはユーザー名と同じであってはなりません-
電子メールではありませんパスワードはメールアドレスと一致してはなりません-
パスワード履歴古いパスワードを再利用しないでください3
パスワードの有効期限が切れるパスワードの有効期限 (日)90
ハッシュアルゴリズムアルゴリズムハッシュパスワードアルゴン2
ハッシュ反復ハッシュラウンド数5 (アルゴン2)

CLI による設定:

bin/kcadm.sh update realms/my-company \
  -s 'passwordPolicy="length(8) and upperCase(1) and lowerCase(1) and digits(1) and specialChars(1) and notUsername and passwordHistory(3)"'

3. ユーザープロフィール

ユーザープロフィールは、管理者がユーザー属性のスキーマを定義できる機能で、ユーザーが持つ属性、検証方法、インターフェイス上での表示方法を制御できます。

3.1 ユーザープロファイルの有効化

Keycloak 24以降では、ユーザープロファイルがデフォルトで有効になっています。古いバージョンの場合:

  1. 入力レルム設定 → 一般的な

  2. 探すユーザープロファイルが有効になっています: の上

有効にしたら、アクセスしますレルム設定 → ユーザープロフィール設定します。

3.2 属性スキーマの定義

各属性には次の構成があります。

  • 名前— 属性名 (小文字、API に使用)

  • 表示名— UI 表示名 (i18n サポート:${プロフィール.属性.部門})

  • 権限— 閲覧/編集できる人 (管理者、ユーザー)

  • 検証— 値の検証ルール

  • 注釈— UI レンダリングのメタデータ

  • 必須— ユーザー、管理者、またはその両方に必要

  • 多値— 複数の値を許可します

3.3 組み込み属性

Keycloak には使用可能な属性があります。

属性説明するデフォルト
ユーザー名。ユーザー名ログイン名必須、固有
電子メール電子メールアドレス必須(オフにすることもできます)
ファーストネーム名前必須
苗字姓必須

3.4 カスタム属性の作成

属性の作成例電話番号:

  1. 入力レルム設定 → ユーザープロフィール

  2. クリック属性の作成

  3. 構成:

    • 名前: 電話番号
    • 表示名: 電話番号
    • 属性グループ: (選択または新規作成)
    • 次の場合に有効になります:いつも
    • 必須: ユーザーに必須

3.5 バリデーター

Keycloakは、属性値をチェックするための多くのバリデーターを提供します。

バリデーター説明する構成例
長さ。長さ長さ制限最小: 3、最大: 50
電子メールメール形式を確認する-
パターン。パターン正規表現パターンを確認する^\\+[0-9]{10,15}$
整数整数をチェックする最小: 0、最大: 999999
ダブル実数を確認する最小: 0.0、最大: 100.0
ウリ有効な URL を確認する-
オプションリスト内の制限値["vn","us","jp"]
人名禁止文字名前内の特殊文字をブロックする-
ユーザー名の禁止文字ユーザー名内の特殊文字をブロックする-
多値値の数を検証する最小: 1、最大: 5

属性の設定例電話番号JSON 経由 ([ユーザー プロファイル] タブ → JSON エディター):

{
  "attributes": [
    {
      "name": "phone_number",
      "displayName": "Phone Number",
      "validations": {
        "length": {
          "min": 10,
          "max": 15
        },
        "pattern": {
          "pattern": "^\\+[0-9]{10,15}$",
          "error-message": "Phone number must start with + and contain 10-15 digits"
        }
      },
      "required": {
        "roles": ["user"]
      },
      "permissions": {
        "view": ["admin", "user"],
        "edit": ["admin", "user"]
      },
      "annotations": {
        "inputType": "tel",
        "inputHelperTextBefore": "Enter your phone number with country code (e.g., +84901234567)"
      }
    }
  ]
}

3.6 UI レンダリングの注釈

注釈を使用すると、登録/アカウント ページでの属性の表示方法をカスタマイズできます。

注釈説明する価値
入力タイプHTML入力タイプテキスト、電子メール、電話番号、番号、日付、選択、複数選択、テキストエリア、html5-*
inputHelperTextBefore入力の前にヘルパー テキストが表示されますテキスト文字列
inputHelperTextAfter入力後にヘルパーテキストが表示されるテキスト文字列
inputOptionsFromValidationバリデーターからオプションを取得する検証名 (例: 「オプション」)

3.7 プログレッシブプロファイリング

プログレッシブ プロファイリングを使用すると、登録時にすべての情報を要求するのではなく、段階的にユーザー情報を収集できます。

  1. 属性を作成する必須 → ユーザーに必須: の上

  2. ユーザーがログインするときに、属性に値がない場合、Keycloakは入力を求めるフォームを表示します。

  3. と組み合わせる「いつ有効になるか」スコープ— クライアントが特定のスコープを要求する場合にのみ属性が必要です

例: 属性電話番号クライアントがスコープを要求した場合にのみ必要です電話。電話:

{
  "name": "phone_number",
  "required": {
    "roles": ["user"],
    "scopes": ["phone"]
  }
}

4. グループとサブグループ

グループは、各ユーザーを個別に割り当てるのではなく、ユーザーを整理し、ユーザーのグループに一度にロールと属性を適用するのに役立ちます。

4.1 管理コンソールからグループを作成する

  1. クリックグループサイドバーにある

  2. クリックグループの作成

  3. 入力名前: エンジニアリング

  4. クリック作成する

4.2 サブグループの作成

サブグループは、親グループから属性と役割のマッピングを継承します。

  1. グループをクリックしますエンジニアリング

  2. クリックサブグループの作成

  3. 名前を入力してください:バックエンド, フロントエンド, DevOps

グループ構造の例:

Engineering/
├── Backend/
│   ├── Java Team
│   └── Go Team
├── Frontend/
│   ├── Web Team
│   └── Mobile Team
└── DevOps/
    ├── SRE
    └── Platform

Operations/ ├── HR ├── Finance └── Legal

4.3 CLI 経由でグループを作成する

# Tạo top-level group
bin/kcadm.sh create groups -r my-company -s name="Engineering"

Lấy group ID

GROUP_ID=$(bin/kcadm.sh get groups -r my-company --fields id,name | jq -r '.[] | select(.name=="Engineering") | .id')

Tạo sub-group

bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="Backend" bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="Frontend" bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="DevOps"

4.4 グループ属性

グループにはキーと値の属性を含めることができます。メタデータやグループ構成に役立ちます。

# Thêm attributes cho group
bin/kcadm.sh update groups/$GROUP_ID -r my-company \
  -s 'attributes={"cost_center":["CC-ENG-001"],"location":["HCM","HN"]}'

管理コンソール経由: [グループ] → [タブ] をクリックします。属性→ キーと値のペアを追加します。

4.5 ユーザーをグループに追加する

# Qua Admin Console:
# Users → chọn user → tab Groups → Join group → chọn group

Qua CLI

USER_ID=$(bin/kcadm.sh get users -r my-company -q username=john.doe --fields id --format csv --noquotes) bin/kcadm.sh update users/$USER_ID/groups/$GROUP_ID -r my-company -s realm=my-company -s userId=$USER_ID -s groupId=$GROUP_ID -n

Qua REST API

curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID/groups/$GROUP_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"

4.6 デフォルトのグループ

デフォルト グループは、アカウントの作成時または登録時に新しいユーザーを自動的に追加します。

  1. 入力グループ

  2. デフォルトとして設定するグループを選択します

  3. あるいは入ってくださいレルム設定 → ユーザー登録 → デフォルトのグループ

# Qua CLI
bin/kcadm.sh update realms/my-company -s 'defaultGroups=["/Engineering/Backend"]'

5. 必要なアクション

必須アクションは、正常にログインできるようになる前にユーザーが実行する必要があるアクションです。

5.1 利用可能な必須アクションのリスト

アクション説明する
パスワードを更新するパスワードの変更が必要です
メールの確認メール認証
OTPの構成OTP(TOTP/HOTP)の設定
プロフィールを更新する個人情報を更新する
利用規約利用規約に同意する
Web認証の構成WebAuthnデバイスの登録
ユーザーロケールの更新言語を選択してください
認証情報の削除古い認証情報を削除する

5.2 必要なアクションをユーザーに割り当てる

# Qua Admin Console:
# Users → chọn user → tab Details → Required user actions → chọn actions

Qua CLI

bin/kcadm.sh update users/$USER_ID -r my-company
-s 'requiredActions=["UPDATE_PASSWORD","VERIFY_EMAIL","CONFIGURE_TOTP"]'

Qua REST API

curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
-d '{ "requiredActions": ["UPDATE_PASSWORD", "VERIFY_EMAIL"] }'

5.3 デフォルトの必須アクション

すべての新規ユーザーに対してデフォルトで必要なアクションを次の場所で構成します。認証 → 必要なアクション:

  • 列をオンにするデフォルトのアクションとして設定望ましいアクションのために

  • すべての新規ユーザーにはデフォルトのアクションが自動的に割り当てられます

6. ユーザーの自己登録

6.1 自己登録を有効にする

  1. 入力レルム設定 → ログイン

  2. オンにするユーザー登録: の上

  3. ログインページに「登録」リンクが表示されます

6.2 登録用の reCAPTCHA

登録フォームをボットから保護するには、reCAPTCHA を有効にします。

  1. Google reCAPTCHA にサインアップするには、https://www.google.com/recaptcha

  2. 入力認証 → フロー → 登録

  3. ステップの検索再キャプチャ→ 無効からに切り替えます必須

  4. 歯車アイコンをクリック→入力サイトキーそして秘密鍵Googleから

6.3 登録フォームのカスタマイズ

ユーザー プロファイルを使用すると、登録フォームに表示されるフィールドを制御できます。

  • 属性付きユーザーに必須:フォーム上にONと表示されます

  • 表示順序並べ替え順序ユーザープロファイル設定内

  • 使用属性グループ関連するフィールドをグループ化する

7. なりすまし

偽装を使用すると、管理者は別のユーザーとして「偽装」ログインできるため、デバッグやサポートに役立ちます。

7.1 偽装の使用

  1. 入力ユーザー→ なりすます必要があるユーザーを見つけます

  2. ドロップダウンメニュー(ケバブメニュー)をクリック →なりすます

  3. ブラウザは新しいタブを開き、そのユーザー名でログインします。

  4. すべてのアクションはイベント タイプのイベントに記録されます。なりすます

7.2 REST APIを介した偽装

curl -s -X POST \
  "http://localhost:8080/admin/realms/my-company/users/$USER_ID/impersonation" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json"

セキュリティ上の注意:

  • ユーザーのみが役割を持ちますなりすまし領域内でレルム管理なりすますことができます

  • すべての偽装イベントがログに記録されます - 監査にとって重要です

  • 運用環境では、権限の偽装をスーパー管理者のみに制限します

8. ユーザーの高度な検索と管理

8.1 ユーザーの検索

# Tìm theo username
bin/kcadm.sh get users -r my-company -q username=john

Tìm theo email

bin/kcadm.sh get users -r my-company -q email=[email protected]

Tìm theo attribute

bin/kcadm.sh get users -r my-company -q "q=department:Engineering"

Tìm với pagination

bin/kcadm.sh get users -r my-company --offset 0 --limit 20

REST API - tìm với nhiều tiêu chí

curl -s -X GET
"http://localhost:8080/admin/realms/my-company/users?search=john&max=20&first=0"
-H "Authorization: Bearer $ACCESS_TOKEN" | jq '.[].username'

8.2 ユーザーの削除

# Qua CLI
bin/kcadm.sh delete users/$USER_ID -r my-company

Qua REST API

curl -s -X DELETE
"http://localhost:8080/admin/realms/my-company/users/$USER_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"

8.3 ユーザーを無効にする (削除ではなく)

# Disable user - vẫn giữ data nhưng không cho login
bin/kcadm.sh update users/$USER_ID -r my-company -s enabled=false

8.4 一括操作

CSV から複数のユーザーを作成するスクリプトの例:

#!/bin/bash
# bulk-create-users.sh

REALM="my-company"

while IFS=',' read -r username email firstName lastName department; do bin/kcadm.sh create users -r $REALM
-s username="$username"
-s email="$email"
-s firstName="$firstName"
-s lastName="$lastName"
-s enabled=true
-s emailVerified=true
-s "attributes={"department":["$department"]}"

bin/kcadm.sh set-password -r $REALM
--username "$username"
--new-password "Welcome@123"
--temporary

echo "Created user: $username" done < users.csv

9.個人データの管理

Keycloak は、以下を通じて GDPR 準拠をサポートします。アカウントコンソール、ユーザーに次のことを許可します。

  • 個人情報の閲覧— メールアドレス、名前、属性

  • 情報を編集する— ユーザープロファイルの権限に依存します

  • セッションを見る— アクティブなログインセッション

  • デバイスの管理— ログインしたデバイスの表示と取り消し

  • アプリケーションを見る— アクセスが許可されたアプリケーション

  • アカウントを削除する— 自分でアカウントを削除します (許可されている場合)

アカウントコンソールのURL:

http://localhost:8080/realms/{realm}/account

アカウントの削除を有効にする:

  1. 入力認証 → 必要なアクション

  2. アクションを有効にするアカウントの削除

  3. 入力レルム設定 → ログイン→オンにするアカウントを削除する

10. 練習問題

  1. ユーザープロファイルの作成レルム用私の会社カスタム属性を使用:

    • 電話番号(必須、国際形式の正規表現バリデータ)
    • 部門(必須、オプション: エンジニアリング、人事、財務、マーケティング)
    • 従業員ID(管理者のみ編集、パターン: EMP-[0-9]{4})
  2. グループ階層の作成:

    • エンジニアリング → バックエンド、フロントエンド、DevOps
    • オペレーション → 人事、財務
  3. 5人のユーザーを作成するCLI 経由、各ユーザーは異なるグループに属し、一時パスワード

  4. 自己登録をオンにするメール認証と登録テストあり

  5. パスワードポリシーを構成する: 最小 10 文字、大文字 1 文字、数字 1 文字、特殊文字 1 文字、履歴 5 文字、有効期限 90 日

11. まとめ

このレッスンでは、次のことを学びました。

  • 作成と管理ユーザー管理コンソール、CLI、REST API 経由

  • 確立する資格そしてパスワードポリシー

  • 使用ユーザープロフィールバリデーターとアノテーションを使用して属性スキーマを定義する

  • 作成するグループそしてサブグループ階層、属性、およびデフォルトのグループを使用して

  • 構成必要なアクションユーザーに必要な

  • オンにする自己登録reCAPTCHAあり

  • 使用なりすましデバッグ用

  • 管理個人データGDPR準拠のため

次の記事で手順を説明します役割、権限、アクセス制御キークロークで。