16.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 证书身份验证时使用。 -
与应用程序/客户端用户识别者相关的元数据。例如
saml.persistent.name.id.for.my_app
可以包含 SAML NameID,客户端 applicationmy_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 script ,
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
等属性。通配符字符 *
仅在属性名称的末尾支持,因此管理员可以有效地拒绝所有以指定字符开头的属性。属性中间的 *
被视为普通字符。