搜索

5.2. 管理用户属性

download PDF

在红帽构建的 Keycloak 中,用户与一组属性关联。这些属性用于更好地描述和识别红帽构建的 Keycloak 中的用户,以及将有关它们的额外信息传递给应用程序。

用户配置文件定义了定义良好的模式,用于表示用户属性以及如何在域中管理。通过对用户信息提供一致的视图,管理员可以控制管理属性的不同方面,并更轻松地扩展红帽构建的 Keycloak 以支持其他属性。

虽然用户配置文件主要针对最终用户可以管理的属性(例如:名字和姓氏、电话等),它也用于管理您要与用户关联的任何其他元数据。

用户配置集还可让管理员:

  • 为用户属性定义 schema
  • 根据上下文信息定义是否需要属性(例如:仅需要用户或 admins,还是根据请求的范围)
  • 定义用于查看和编辑用户属性的特定权限,以便遵守无法看到或更改某些属性(包括管理员)的强隐私要求。
  • 动态强制用户配置文件合规性,以便始终更新用户信息,并遵守与属性关联的元数据和规则
  • 利用内置验证器或编写自定义验证规则,以针对每个属性定义验证规则
  • 根据属性定义,用户会在帐户控制台中动态呈现用户与交互的表单,如注册、更新配置集、代理和个人信息,而无需手动更改它们。
  • 在管理控制台中自定义用户管理界面,以便根据用户配置集模式动态呈现属性

用户配置文件模式或配置使用 JSON 格式来表示属性及其元数据。在管理控制台中,您可以通过单击左侧菜单中的 Realm Settings 来管理配置,然后单击该页面上的 User Profile 选项卡。

在下一部分中,我们将了解如何创建自己的用户配置文件模式或配置以及如何管理属性。

5.2.1. 了解默认配置

默认情况下,Red Hat build of Keycloak 提供了一个基本的用户配置集配置,涵盖了一些最常见的用户属性:

Name描述

username

用户名

email

最终用户的首选电子邮件地址。

firstName

给定最终用户的名称或名字

LastName

End-User 的 surname 或姓氏

在红帽构建的 Keycloak 中,usernameemail 属性都有一个特殊的处理,因为它们通常用于识别、验证和链接用户帐户。对于这些属性,您限于更改其设置,您无法删除它们。

注意

usernameemail 属性的行为会相应地更改为 域的登录 设置。例如,将 Email 改为 usernameEdit username 设置将覆盖您在用户配置文件配置中设置的任何配置。

正如您在以下部分中看到的那样,您可以通过引入自己的属性或更改任何可用属性的设置以更好地满足您的需要,从而自由更改默认配置。

5.2.2. 了解用户配置文件上下文

在红帽构建的 Keycloak 中,用户通过不同的上下文管理:

  • 注册
  • 更新配置文件
  • 通过代理或社交供应商进行身份验证时查看配置集
  • 帐户控制台
  • 管理(例如:管理控制台和管理 REST API)

除了管理上下文外,所有其他上下文都被视为最终用户上下文,因为它们与用户自助服务流相关。

了解这些上下文非常重要,了解您的用户配置文件配置在管理用户时将生效的位置。无论用户管理的上下文如何,都将使用同一用户配置文件配置来呈现 UI 并验证属性值。

正如您在以下部分中看到的,您可以限制某些属性只能从管理上下文中可用,并为最终用户完全禁用它们。如果您不希望管理员访问某些用户属性,但只限于最终用户,则另一方面也是如此。

5.2.3. 了解受管和非受管属性

默认情况下,红帽构建的 Keycloak 只会识别用户配置集配置中定义的属性。服务器会忽略没有明确定义的任何其他属性。

通过严格了解哪些用户属性可以设置为您的用户,以及如何验证它们的值,红帽构建的 Keycloak 可以在您的域中添加另一个保护障碍,并帮助您防止与用户关联的意外属性和值。

这意味着,用户属性可以归类如下:

  • 受管.这些是您的用户配置文件控制的属性,您要允许最终用户和管理员从任何用户配置文件上下文管理。对于这些属性,您希望完全控制它们的管理方式和时间。
  • 非受管.这些是在用户配置集中没有显式定义的属性,以便默认情况下,Red Hat build of Keycloak 会完全忽略它们。

虽然默认情况下禁用非受管属性,但您可以使用不同的策略配置域来定义服务器如何处理它们。为此,请点击左侧菜单中的 Realm Settings,点 General 选项卡,然后从 Unmanaged Attributes 设置中选择以下选项之一:

  • 禁用。这是默认策略,以便从所有用户配置集上下文禁用非受管属性。
  • 启用。此策略为所有用户配置集上下文启用非受管属性。
  • 管理员可以查看。此策略只从管理上下文以只读方式启用非受管属性。
  • 管理员可以编辑。此策略只从管理上下文启用非受管属性,以进行读取和写入。

这些策略可让您精细控制服务器如何处理非受管属性。在通过管理上下文管理用户时,您可以选择完全禁用或仅支持非受管属性。

如果启用了非受管属性(即使部分),您可以在 User Details UI 中的 Attributes 选项卡中从管理控制台管理它们。如果策略被设置为 Disabled this tab 不可用。

作为安全建议,尝试尽可能遵循最严格的策略(例如: 禁用或管理员 编辑)以防止在通过最终用户管理其配置集时将意外属性(和值)设置为您的用户。避免设置 Enabled 策略,并首选在用户配置文件配置下定义最终用户可以管理的所有属性。

注意

Enabled 策略针对于从以前的红帽构建的 Keycloak 版本迁移,并避免在使用自定义主题并使用自己的自定义用户属性扩展服务器时破坏行为。

正如您在以下部分中看到的那样,您还可以通过选择它是否应对用户和/或管理员可见或写入,从而限制属性的使用者。

对于非受管属性,最大长度为 2048 个字符。要指定不同的最小值或最大长度,请将 unmanaged 属性改为 managed 属性并添加 长度 验证器。

警告

红帽构建的 Keycloak 会缓存其内部缓存中与用户相关的对象。属性越长,缓存消耗的内存越多。因此,建议限制 length 属性的大小。考虑在红帽构建的 Keycloak 外部存储大型对象,并通过 ID 或 URL 引用它们。

5.2.4. 管理用户配置文件

用户配置集配置基于每个域进行管理。为此,请单击左侧菜单中的 Realm Settings 链接,然后单击 User Profile 选项卡。

用户配置文件选项卡

user profile tab

Attributes 子选项卡中,您将拥有所有受管属性的列表。

Attribute Groups 子选项卡中,您可以管理属性组。属性组允许您关联属性,以便在呈现面向用户的表单时显示它们。

JSON Editor 子选项卡中,您可以查看和编辑 JSON 配置。您可以使用此选项卡获取当前的配置,或者手动管理它。您对此选项卡所做的任何更改都会反映在其他标签页中,反之亦然。

在下一部分中,您将了解如何管理属性。

5.2.5. 管理属性

属性 子选项卡中,您可以创建、编辑和删除受管属性。

要定义新属性并将其与用户配置文件关联,请单击 属性列表顶部的 Create 属性按钮。

属性配置

user profile create attribute

在配置属性时,您可以定义以下设置:

Name
属性的名称,用于唯一标识属性。
显示名称
属性的用户友好名称,主要用于呈现面向用户的表单。它还支持 使用国际消息
Multivalued
如果启用,则属性支持多个值和 UI,以允许设置多个值。启用此设置时,请确保添加验证器来为值数设置硬限制。
属性组
属性所属的属性组(若有)。
启用的时间
启用或禁用属性。如果设置为 Always,则属性可从任何用户配置文件上下文中可用。如果请求 范围,则属性仅在代表用户的客户端请求一组或多个范围时才可用。您可以根据请求的客户端范围,使用这个选项来动态强制实施某些属性。对于帐户和管理控制台,不会评估范围,并且属性始终被启用。这是因为,根据范围过滤属性仅在运行身份验证流时正常工作。
必填
将条件设置为根据需要标记属性。如果禁用,则属性是可选的。如果启用,您可以设置所需的设置 来根据 用户配置集上下文将属性标记为必需,以便最终用户(通过最终用户上下文)或管理员(通过管理上下文)需要属性。您还可以在设置时设置 Required 来仅在请求一组或多个客户端范围时才将属性标记为 required。如果设置为 Always,则需要来自任何用户配置文件上下文的属性。如果请求 范围,则只有代表用户的客户端请求一组或多个范围时才需要属性。对于帐户和管理控制台,不会评估范围,且不需要属性。这是因为,根据范围过滤属性仅在运行身份验证流时正常工作。
权限
在本节中,您可以在从最终用户或管理上下文中管理属性时定义读写权限。Who 可以编辑 设置,将属性分别由 User 和/或 Admin 分别从最终用户和管理上下文中写入。Who 可以从 最终用户和管理上下文中分别将属性标记为只读。
验证
在本节中,您可以定义管理属性值时将执行的验证。Red Hat build of Keycloak 提供了一组内置验证器,您可以选择它们可能会自行添加。如需更多详细信息,请参阅 Validating Attributes 部分。
注解
在本小节中,您可以将注解与属性关联。对于渲染目的,注解主要有助于将其他元数据传递给前端。如需了解更多详细信息,请参阅 定义 UI Annotations 部分。

当您创建属性时,属性只能从管理上下文中可用,以避免意外向最终用户公开属性。实际上,在通过最终用户上下文管理其配置文件时,最终用户无法访问该属性。您可以随时根据您的需要更改 Permissions 设置。

5.2.6. 验证属性

您可以启用对受管属性的验证,以确保属性值符合特定的规则。为此,您可以在管理属性时从 Validations 设置中添加或删除验证器。

属性验证

user profile validation

在写入属性时,验证都会发生,它们可能会抛出在值验证失败时在 UI 中显示的错误。

为安全起见,用户可编辑的每个属性都应该有一个验证来限制用户输入的值的大小。如果没有指定 长度 验证器,Red Hat build of Keycloak 默认为最大 2048 个字符。

5.2.6.1. 内置验证器

Red Hat build of Keycloak 提供了您可以从中选择的一些内置验证器,您也可以通过扩展 Validator SPI 来提供自己的验证器。

以下列表提供了所有内置验证器的列表:

Name描述Configuration

length

根据最小和最大长度,检查字符串值的长度。

Min: 定义允许的最小长度的整数。

max :一个整数,用于定义最大允许长度。

trim-disabled :一个布尔值,用于定义在验证前是否修剪该值。

整数

检查该值是否为整数,并在较低和/或大写范围内。如果没有定义范围,验证器只检查该值是否为有效数字。

Min: 定义较低范围的整数。

max :定义上限的整数。

double

检查该值是否为双倍,并在低和/或大写范围内。如果没有定义范围,验证器只检查该值是否为有效数字。

Min: 定义较低范围的整数。

max :定义上限的整数。

uri

检查该值是否为有效的 URI。

None

pattern

检查值是否与特定 RegEx 模式匹配。

Pattern :验证值时要使用的 RegEx 模式。

error-message : i18n 捆绑包中错误消息的密钥。如果没有设置通用消息,则使用通用消息。

email

检查该值是否具有有效的电子邮件格式。

max-local-length :一个整数,用于定义电子邮件本地部分的最大长度。每个规格默认为 64。

local-date

检查值是否具有基于 realm 和/或用户区域设置的有效格式。

None

person-name-prohibited-characters

检查该值是否为有效的人员名称,作为脚本注入等攻击的额外障碍。验证基于默认的 RegEx 模式,用于阻止人员名称中不常见字符。

error-message : i18n 捆绑包中错误消息的密钥。如果没有设置通用消息,则使用通用消息。

username-prohibited-characters

检查该值是否为有效的用户名,作为脚本注入等攻击的额外障碍。验证基于默认的 RegEx 模式,用于阻止用户名中不常见的字符。

error-message : i18n 捆绑包中错误消息的密钥。如果没有设置通用消息,则使用通用消息。

选项

检查该值是否来自定义的允许值集合。可用于验证通过 select 和 multiselect 字段输入的值。

选项 :包含允许值的字符串数组。

up-username-not-idn-homograph

该字段只能包含 latin 字符和常见 unicode 字符。这对于字段很有用,可以是 IDN 摄影攻击(通常是用户名)的主题。

error-message : i18n 捆绑包中错误消息的密钥。如果没有设置通用消息,则使用通用消息。

多值

验证多值属性的大小。

Min: 整数,用于定义允许的属性值数。

max :一个整数,用于定义允许的最大属性值数。

5.2.7. 定义 UI 标注

要将额外信息传递给前端,可以使用注解对属性进行解码,以决定如何呈现属性。当扩展红帽构建的 Keycloak 主题时,此功能主要有用,以根据与属性关联的注解动态呈现页面。

使用注解(例如,用于更改 属性的 HTML 类型 )并更改 属性的 DOM 表示,如以下部分中所示。

属性注解

user profile annotation

注解是与 UI 共享的键/值对,它们可以更改与属性对应的 HTML 元素是如何呈现的。只要您的 realm 使用的主题支持注解,就可以将您想要的注解设置为属性。

注意

您的唯一限制是避免在其密钥中使用 kc 前缀,因为这些注解使用此前缀保留给红帽构建的 Keycloak。

5.2.7.1. 内置注解

红帽构建的 Keycloak 内置主题支持以下注解:

Name描述

inputType

表单输入字段的类型。下表中描述了可用的类型。

inputHelperTextBefore

帮助程序文本在(左上)输入字段之前显示。此处可以使用直接文本或国际化模式(如 ${i18n.key})。文本在呈现到页面中时不会进行 html 转义,因此您可以使用此处的 html 标签格式化文本,但您还必须正确转义 html 控制字符。

inputHelperTextAfter

帮助程序文本在(在)输入字段后显示。此处可以使用直接文本或国际化模式(如 ${i18n.key})。文本在呈现到页面中时不会进行 html 转义,因此您可以使用此处的 html 标签格式化文本,但您还必须正确转义 html 控制字符。

inputOptionsFromValidation

选择和多选类型的注解。从中获取输入选项的可选自定义属性验证名称。请参见以下 的详细描述。

inputOptionLabelsI18nPrefix

选择和多选类型的注解。在 UI 中呈现选项的国际化密钥前缀。请参见以下 的详细描述。

inputOptionLabels

选择和多选类型的注解。可选映射为选项定义 UI 标签(直接或使用国际化)。请参见以下 的详细描述。

inputTypePlaceholder

应用到字段的 HTML 输入 占位符 属性 - 指定简短提示,用于描述输入字段的预期值(如示例值或预期格式的简短描述)。在用户输入值前,在输入字段中会显示简短提示。

inputTypeSize

应用到字段的 HTML 输入 大小 属性 - 指定单行输入字段的宽度(以字符为单位)。对于基于 HTML 选择类型的字段,它指定了显示选项的行数。可能无法工作,具体取决于使用的 css!

inputTypeCols

应用于字段的 HTML 输入 cols 属性 - 指定宽度(对于 textarea 类型)。可能无法工作,具体取决于使用的 css!

inputTypeRows

应用到字段的 HTML 输入 - 为 textarea 类型指定高亮、字符数。对于选择字段,它通过显示的选项指定行数。可能无法工作,具体取决于使用的 css!

inputTypePattern

应用到提供客户端侧验证的字段的 HTML 输入 模式 属性 - 指定检查输入字段值的正则表达式。对于单行输入很有用。

inputTypeMaxLength

应用到提供客户端验证的字段的 HTML 输入 maxlength 属性 - 可以在输入字段中输入的文本的最大长度。对于文本字段很有用。

inputTypeMinLength

应用到提供客户端验证的字段的 HTML 输入 minlength 属性 - 可以在输入字段中输入的最小文本长度。对于文本字段很有用。

inputTypeMax

应用到提供客户端侧验证的字段的 HTML 输入 max 属性 - 可以在输入字段中输入的最大值。对数字字段很有用。

inputTypeMin

应用到提供客户端侧验证的字段的 HTML 输入 min 属性 - 可以在输入字段中输入的最小值。对数字字段很有用。

inputTypeStep

应用到字段的 HTML 输入 step 属性 - 指定输入字段中的法律数字之间的间隔。对数字字段很有用。

数字格式

如果设置,data-kcNumberFormat 属性添加到字段中,以根据给定格式格式化值。此注解针对数字,其中格式基于确定的位置的预期数字数。例如,一个格式 ({2}){5}-{4} 将字段值格式化为 (00) 00000-0000

number UnFormat

如果设置,data-kcNumberUnFormat 属性将添加到字段中,以便在提交表单前根据给定格式格式化值。如果您不希望存储特定属性的任何格式,但仅在客户端一侧格式化该值,则此注解很有用。例如,如果当前值为 (00) 00000-0000,如果将值 {11} 设置为此注解,则该值将更改为 00000000000,或者指定一组或一组数字,则该值将更改为 00000000000。确保添加验证器以在存储值前执行服务器端验证。

注意

字段类型使用 HTML 表单字段标签和应用于它们的属性 - 它们的行为取决于 HTML 规格和浏览器支持它们。

可视化渲染也取决于所使用的主题中应用的 cs 样式。

5.2.7.2. 更改 属性的 HTML 类型

您可以通过设置 inputType 注解来更改 HTML5 输入元素 的类型。可用的类型有:

Name描述使用的 HTML 标签

text

单行文本输入.

输入

textarea

多行文本输入.

textarea

select

常见单一选择输入。请参阅下面如何配置选项的描述。

select

select-radiobuttons

通过一组单选按钮选择输入。请参阅下面如何配置选项的描述。

输入组

multiselect

常见多选择输入。请参阅下面如何配置选项的描述。

select

multiselect-checkboxes

通过一组复选框进行多选输入。请参阅下面如何配置选项的描述。

输入组

html5-email

基于 HTML 5 规格的电子邮件地址的单行文本输入。

输入

html5-tel

基于 HTML 5 规格的电话号码的单行文本输入。

输入

html5-url

基于 HTML 5 spec 的用于 URL 的单行文本输入。

输入

html5-number

基于 HTML 5 规格的单行输入(整数或浮点,取决于 step

输入

html5-range

根据 HTML 5 规格输入数字的滑块。

输入

html5-datetime-local

基于 HTML 5 规格的日期时间输入。

输入

html5-date

基于 HTML 5 规格的日期输入。

输入

html5-month

基于 HTML 5 规格的月份输入。

输入

html5-week

基于 HTML 5 规格的周输入。

输入

html5-time

基于 HTML 5 规格的时间输入。

输入

5.2.7.3. 定义 select 和 multiselect 字段的选项

select 和 multiselect 字段的选项从应用到属性的验证中获取,以确保 UI 中显示的验证和字段选项始终一致。默认情况下,选项取自内置 选项 验证。

您可以使用各种方法为选择和多选选项提供 nice 人类可读的标签。最简单的情况是属性值与 UI 标签相同。在这种情况下不需要额外的配置。

选项值与 UI 标签相同

user profile select options simple

当属性值不是 UI 的 ID 类型时,您可以使用 inputOptionLabelsI18nPrefix 注解提供的简单国际化支持。它定义国际化键的前缀,选项值是附加到这个前缀的点。

使用 i18n 键前缀进行 UI 标签的简单国际化

user profile select options simple i18n

选项值的本地化 UI 标签文本必须由 userprofile.jobtitle.swenguserprofile.jobtitle.swarch 键提供,然后使用通用的本地化机制。

您还可以使用 inputOptionLabels 注解来为单个选项提供标签。它包含 option 的标签映射 - 映射中的键是 option 值(在验证中定义),映射中的值是 UI 标签文本本身或其国际化模式(如 ${i18n.key})用于该选项。

注意

您必须使用 User Profile JSON Editor 输入映射作为 inputOptionLabels 注解值。

没有国际化的独立选项直接输入标签示例:

"attributes": [
<...
{
  "name": "jobTitle",
  "validations": {
    "options": {
      "options":[
        "sweng",
        "swarch"
      ]
    }
  },
  "annotations": {
    "inputType": "select",
    "inputOptionLabels": {
      "sweng": "Software Engineer",
      "swarch": "Software Architect"
    }
  }
}
...
]

单个选项的国际化标签示例:

"attributes": [
...
{
  "name": "jobTitle",
  "validations": {
    "options": {
      "options":[
        "sweng",
        "swarch"
      ]
    }
  },
  "annotations": {
    "inputType": "select-radiobuttons",
    "inputOptionLabels": {
      "sweng": "${jobtitle.swengineer}",
      "swarch": "${jobtitle.swarchitect}"
    }
  }
}
...
]

本地化文本必须由 jobtitle.swengineerjobtitle.swarchitect 键提供,使用常见的本地化机制。

自定义验证器可用于提供选项,因为 inputOptionsFromValidation 属性注解。此验证必须具有提供选项数组 的选项 配置。国际化的工作方式与内置选项验证 提供的选项 相同。

自定义验证器提供的选项

user profile select options custom validator

5.2.7.4. 更改属性的 DOM 表示

您可以使用 kc 前缀设置注解来启用额外的客户端行为。这些注解将转换为属性的对应元素中的 HTML 属性,带有 data- 前缀,具有相同名称的脚本将被加载到动态页面,以便您可以根据自定义数据属性选择 DOM 中的元素,并通过修改其 DOM 表示来相应地分离它们。

例如,如果您向属性添加 kcMyCustomValidation 注解,则 HTML 属性 data-kcMyCustomValidation 会添加到属性的对应 HTML 元素中,并且从 < THEME TYPE>/resources/js/kcMyCustomValidation.js 的自定义主题加载 JavaScript 模块。有关如何将自定义 JavaScript 模块部署到您的主题的更多信息,请参阅 服务器开发人员指南

JavaScript 模块可以运行任何代码来自定义 DOM 以及每个属性呈现的元素。为此,您可以使用 userProfile.js 模块为自定义注解注册注解描述符,如下所示:

import { registerElementAnnotatedBy } from "./userProfile.js";

registerElementAnnotatedBy({
  name: 'kcMyCustomValidation',
  onAdd(element) {
    var listener = function (event) {
        // do something on keyup
    };

    element.addEventListener("keyup", listener);

    // returns a cleanup function to remove the event listener
    return () => element.removeEventListener("keyup", listener);
  }
});

registerElementAnnotatedBy 是一个注册注解描述符的方法。描述符是 具有名称、引用注解名称和一个 onAdd 函数的对象。每当页面被渲染或带有注解的属性添加到 DOM 时,都会调用 onAdd 函数,以便您可以自定义元素的行为。

onAdd 功能也可以返回执行清理的功能。例如,如果您要将事件监听程序添加到元素中,您可能希望在从 DOM 中删除该元素时删除它们。

另外,如果 userProfile.js 不足以满足您的需要,您还可以使用您想要的任何 JavaScript 代码:

document.querySelectorAll(`[data-kcMyCustomValidation]`).forEach((element) => {
    var listener = function (evt) {
        // do something on keyup
    };

    element.addEventListener("keyup", listener);
  });

5.2.8. 管理属性组

Attribute Groups 子选项卡中,您可以创建、编辑和删除属性组。属性组允许您为关联的属性定义容器,以便在用户表单上呈现容器。

属性组列表

user profile attribute group list

注意

您不能删除绑定到属性的属性组。为此,您应该首先更新属性以删除绑定。

若要创建新组,请单击属性组列表顶部的 Create attributes group 按钮。

属性组配置

user profile create attribute group

在配置组时,您可以定义以下设置:

Name
属性的名称,用于唯一标识属性。
显示名称
属性的用户友好名称,主要用于呈现面向用户的表单。它还支持 使用国际消息
显示描述
在呈现面向用户的表单时,用户友好的文本将显示为工具提示。它还支持 使用国际消息
注解
在本小节中,您可以将注解与属性关联。对于渲染目的,注解主要有助于将其他元数据传递给前端。

5.2.9. 使用 JSON 配置

用户配置文件配置使用明确定义的 JSON 模式存储。您可以通过单击 JSON Editor 子选项卡直接从编辑用户配置文件配置中进行选择。

JSON 配置

user profile json config

JSON 模式定义如下:

{
  "unmanagedAttributePolicy": "DISABLED",
  "attributes": [
    {
      "name": "myattribute",
      "multivalued": false,
      "displayName": "My Attribute",
      "group": "personalInfo",
      "required": {
        "roles": [ "user", "admin" ],
        "scopes": [ "foo", "bar" ]
      },
      "permissions": {
        "view": [ "admin", "user" ],
        "edit": [ "admin", "user" ]
      },
      "validations": {
        "email": {
          "max-local-length": 64
        },
        "length": {
          "max": 255
        }
      },
      "annotations": {
        "myannotation": "myannotation-value"
      }
    }
  ],
  "groups": [
    {
      "name": "personalInfo",
      "displayHeader": "Personal Information",
      "annotations": {
        "foo": ["foo-value"],
        "bar": ["bar-value"]
      }
    }
  ]
}

该架构根据需要支持任意数量的属性和组。

unmanagedAttributePolicy 属性通过设置以下值之一来定义非受管属性策略:如需了解更多详细信息,请参阅 了解受管和非受管属性。

  • DISABLED
  • ENABLED
  • ADMIN_VIEW
  • ADMIN_EDIT

5.2.9.1. 属性架构

对于每个属性,您应该定义一个 名称,并可以选择定义 所需的权限annotations 设置。

required 属性定义是否需要属性。红帽构建的 Keycloak 允许您根据不同的条件设置属性。

当将 required 属性定义为空对象时,始终需要属性。

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {}
  ]
}

另一方面,您可以选择只为用户或管理员或两个都进行必要的属性。以及仅在 Red Hat build of Keycloak 进行身份验证时请求特定范围时,才需要标记属性。

要根据用户和/或管理员的要求标记属性,请设置 roles 属性,如下所示:

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {
        "roles": ["user"]
      }
  ]
}

roles 属性需要一个数组,其值可以是 useradmin,具体取决于用户还是管理员是否要求属性。

同样,您可以选择在验证用户时请求一组或多个范围时所需的属性。为此,您可以使用 scopes 属性,如下所示:

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {
        "scopes": ["foo"]
      }
  ]
}

scopes 属性是一个数组,其值可以是代表客户端范围的任何字符串。

attribute-level permissions 属性可用于定义属性的读取和写入权限。权限根据这些操作的设置,用户是否可以对属性执行,还是管理员或两者。

{
  "attributes": [
    {
      "name": "myattribute",
      "permissions": {
        "view": ["admin"],
        "edit": ["user"]
      }
  ]
}

viewedit 属性都预期值可以是 useradmin 的数组,具体取决于属性是否可以被用户或管理员编辑。

当授予edit权限时,而会获得 view 权限。

attribute-level 注解 属性可用于将其他元数据与属性关联。注解主要用于将属性的额外信息传递给基于用户配置集配置的前端渲染用户属性。每个注释都是键/值对。

{
  "attributes": [
    {
      "name": "myattribute",
      "annotations": {
        "foo": ["foo-value"],
        "bar": ["bar-value"]
      }
  ]
}

5.2.9.2. 属性组架构

对于每个属性组,您应该定义一个 名称,以及可选的 注解 设置。

attribute-level 注解 属性可用于将其他元数据与属性关联。注解主要用于将属性的额外信息传递给基于用户配置集配置的前端渲染用户属性。每个注释都是键/值对。

5.2.10. 自定义 UI 的渲染方式

来自所有用户配置集上下文(包括管理控制台)的 UI 会动态呈现到您的用户配置集配置中。

默认渲染机制提供以下功能:

  • 根据设置为属性的权限显示或隐藏字段。
  • 根据设置为属性的限制,呈现必填字段的标记。
  • 将字段输入类型(text, date, number, select, multiselect)设置为属性。
  • 根据权限设置为属性,将字段标记为只读。
  • 根据将顺序设置为属性的订购字段。
  • 属于同一属性组的组字段。
  • 动态组属于同一属性组的字段。

5.2.10.1. 排序属性

通过拖放属性行到属性列表页面中来设置属性顺序。

排序属性

user profile attribute list order

当您以动态形式呈现字段时,在此页面中设置的顺序会被遵守。

5.2.10.2. 分组属性

当呈现动态形式时,它们将尝试将属于同一属性组的属性分组在一起。

动态更新配置文件表单

user profile update profile

注意

当属性链接到属性组时,属性顺序也很重要,以确保同一组中的属性在同一组标头中关闭。否则,如果组中的属性没有顺序,您可能有相同的组标头以动态形式多次呈现。

5.2.11. 启用 Progressive Profiling

为确保最终用户配置集符合配置,管理员可以使用 VerifyProfile 所需的操作,在向 Keycloak 进行身份验证时强制用户更新其配置集。

注意

VerifyProfile 操作与 UpdateProfile 操作类似。但是,它利用 user 配置集提供的所有功能来自动强制遵守用户配置集配置。

启用后,在 验证用户 时将执行以下步骤:

  • 检查 user 配置集是否与用户配置集配置为 realm 完全合规。这意味着运行验证并确保它们都成功。
  • 如果没有,请在身份验证过程中执行额外的步骤,以便用户可以更新任何缺少的或无效属性。
  • 如果用户配置文件与配置兼容,则不会执行额外的步骤,并且用户继续进行身份验证过程。

VerifyProfile 操作被默认启用。要禁用它,请单击左侧菜单中的 Authentication 链接,然后点 Required Actions 选项卡。在此选项卡中,使用 VerifyProfile 操作的 Enabled 开关来禁用它。

注册 VerifyProfile Required Action

user profile register verify profile action

5.2.12. 使用国际消息

如果要在配置属性、属性组和注解时使用国际化消息,您可以使用从消息捆绑包转换为消息捆绑包的消息,设置其显示名称、描述和值。

为此,您可以使用占位符解析消息键,如 ${myAttributeName},其中 myAttributeName 是消息捆绑包中消息的密钥。如需了解更多详细信息,请参阅 Server Developer Guide,了解如何将消息捆绑包添加到自定义主题中。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.