15.4. 只读用户属性
存储在红帽构建的 Keycloak 中的典型用户具有与其用户配置集相关的各种属性。此类属性包括 email、firstName 或 lastName。但是,用户也可能具有属性,它们不是典型的配置集数据,而是元数据。元数据属性通常为用户只读,而典型的用户从红帽构建的 Keycloak 用户界面或帐户 REST API 中更新这些属性。在使用 Admin REST API 创建或更新用户时,管理员也应有某些属性甚至只读。
元数据属性通常是来自这些组的属性:
-
与用户存储供应商相关的各种链接或元数据。例如,如果是 LDAP 集成,
LDAP_ID
属性包含 LDAP 服务器中用户的 ID。 -
User Storage 置备的元数据。例如,从 LDAP 置备的
createdTimestamp
应该始终是用户或管理员只读的。 -
与各种验证器相关的元数据。例如,
KERBEROS_PRINCIPAL
属性可以包含特定用户的 kerberos 主体名称。同样的属性usercertificate
可以包含与从 X.509 证书绑定数据相关的元数据,这通常在启用 X.509 证书验证时使用。 -
应用程序/客户端与用户识别器相关的元数据。例如,
saml.persistent.name.id.for.my_app
可以包含 SAML NameID,供客户端应用程序my_app
用作用户的标识符。 - 与授权策略相关的元数据,这些策略用于基于属性的访问控制(ABAC)。这些属性的值可用于授权决策。因此,用户无法更新这些属性非常重要。
从长期的角度来看,红帽构建的 Keycloak 将具有正确的用户配置文件 SPI,这将允许精细配置每个用户属性。目前,这个能力还没有完全可用。因此,Red Hat build of Keycloak 具有用户属性的内部列表,这些属性对于用户是只读的,管理员在服务器级别上配置只读。
这是只读属性的列表,由红帽构建的 Keycloak 默认供应商和功能在内部使用,因此始终是只读的:
-
对于用户:
KERBEROS_PRINCIPAL
,LDAP_ID
,LDAP_ENTRY_DN
,CREATED_TIMESTAMP
,createTimestamp
,modifyTimestamp
,userCertificate
,saml.persistent.name.id.for
<.> ,ENABLED
,EMAIL_VERIFIED
-
对于管理员:
KERBEROS_PRINCIPAL
,LDAP_ID
,LDAP_ENTRY_DN
,CREATED_TIMESTAMP
,createTimestamp
,modifyTimestamp
系统管理员有向此列表添加其他属性的方法。该配置目前位于服务器级别。
您可以使用 spi-user-profile-declarative-user-profile-read-only-attributes
和 'spi-user-profile-declarative-user-profile-admin-read-only-attributes
选项来添加此配置。例如:
kc.[sh|bat] start --spi-user-profile-declarative-user-profile-read-only-attributes=foo,bar*
在本例中,用户和管理员无法更新属性 foo
。用户将无法编辑从 bar
开始的任何属性。例如,bar
或 barrier
。配置不区分大小写,因此 FOO
或 BarRier
等属性也会被拒绝。通配符字符 *
仅在属性名称的末尾被支持,因此管理员可以有效地拒绝以指定字符开头的所有属性。属性中中部的 *
被视为普通字符。