16.4. 只读用户属性
存储在 Red Hat Single Sign-On 中的典型用户都有各种与用户配置文件相关的属性。这些属性包括电子邮件、firstName 或 lastname。但是,用户也可能具有属性,它们不是典型配置集数据,而是元数据。元数据属性通常是用户的只读,且典型的用户绝不应该有从 Red Hat Single Sign-On 用户界面或帐户 REST API 更新这些属性的方法。使用 Admin REST API 创建或更新用户时,管理员应当甚至是只读属性。
元数据属性通常是来自这些组的属性:
- 
						与用户存储供应商相关的各种链接或元数据。例如,如果 LDAP 集成,LDAP_ID属性包含 LDAP 服务器中的用户的 ID。
- 
						用户存储调配的元数据。例如,从 LDAP 置备的 createdTimestamp应该始终由用户或管理员只读。
- 
						与各种验证器相关的元数据。例如,KERBEROS_PRINCIPAL属性可以包含特定用户的 kerberos 主体名称。同样地属性usercertificate可以包含与 X.509 证书中的数据绑定相关的元数据,这通常在启用了 X.509 证书身份验证时使用。
- 
						与应用程序/客户端用户识别器相关的元数据。例如,saml.persistent.name.id.my_app可以包含 SAML NameID,供客户端应用程序my_app用作用户标识符。
- 与授权策略相关的元数据,用于基于属性的访问控制(ABAC)。这些属性的值可用于授权决策。因此,务必要能被用户更新这些属性。
从长期角度来看,Red Hat Single Sign-On 将具有适当的用户配置集 SPI,这将允许对每个用户属性进行精细配置。目前,这个功能还没有完全可用。因此,Red Hat Single Sign-On 具有用户的内部用户属性列表,这些属性是只读的,适用于在服务器级别配置的管理员。
这是只读属性的列表,这些属性由 Red Hat Single Sign-On 默认供应商及功能在内部使用,因此始终是只读的:
- 
						用户: 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
				系统管理员可以向此列表中添加其他属性。配置目前在服务器级别可用。您可以将此配置添加到 standalone (-*.xml 文件中到 Red Hat Single Sign-On server subsystem 的配置中:
			
可使用 JBoss CLI 命令配置相同的方法:
/subsystem=keycloak-server/spi=userProfile/:add
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:add(properties={},enabled=true)
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=read-only-attributes,value=[foo,bar*])
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=admin-read-only-attributes,value=[foo])
/subsystem=keycloak-server/spi=userProfile/:add
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:add(properties={},enabled=true)
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=read-only-attributes,value=[foo,bar*])
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=admin-read-only-attributes,value=[foo])
				在本例中,用户和管理员无法更新属性 foo。用户无法从 栏 编辑任何属性。因此,如 bar 或 barrier。配置不区分大小写,因此将拒绝 FOO 或 BarRier 等属性。通配符 * 仅在属性名称的末尾被支持,因此管理员可以有效地拒绝以指定字符开头的所有属性。属性中间的 * 被视为常规字符。