15.4. 只读用户属性
存储在红帽构建的 Keycloak 中的典型用户具有与其用户配置集相关的各种属性。此类属性包括 email、firstName 或 lastName。但是,用户也可以有属性,它们不是典型的配置集数据,而不是元数据。元数据属性通常为用户只读,而典型的用户从红帽构建的 Keycloak 用户界面或帐户 REST API 中更新这些属性。在使用 Admin REST API 创建或更新用户时,一些属性甚至应该对管理员进行只读。
元数据属性通常是来自这些组中的属性:
-
与用户存储提供程序相关的各种链接或元数据。例如,如果 LDAP 集成,
LDAP_ID属性包含 LDAP 服务器中的用户的 ID。 -
数据存储调配的元数据。例如,从 LDAP 置备的
createdTimestamp应该始终由用户或管理员只读。 -
与各种验证器相关的元数据。例如,
KERBEROS_PRINCIPAL属性可以包含特定用户的 kerberos 主体名称。同样的属性usercertificate可以包含与将用户与 X.509 证书数据绑定相关的元数据,该证书通常在启用 X.509 证书身份验证时使用。 -
与由 application/clients 的用户识别器相关的元数据。例如
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. 用于 ENABLED ,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*
kc.[sh|bat] start --spi-user-profile-declarative-user-profile-read-only-attributes=foo,bar*
在本例中,用户和管理员将无法更新属性 foo。用户将无法编辑以 bar 开头的任何属性。例如 bar 或 barrier。配置不区分大小写,因此 FOO 或 BarRier 等属性也会被拒绝。通配符字符仅在属性名称末尾被支持,因此管理员可以有效地拒绝以指定字符开头的所有属性。属性中 中间的 192.168.1.0/24 被视为普通字符。