2.8. 为安全 Realms 设置缓存

Elytron 提供了一个 缓存域,允许您从安全域缓存凭据查找的结果。例如,您可以使用它为来自 LDAP 或数据库的凭证配置缓存,以提高经常查询用户的性能。

caching-realm 使用 LRULeast Recently Used 缓存策略来缓存 PasswordCredential 凭证,该策略中访问的条目在达到最大条目数时将被丢弃。

您可以将 缓存域用于以下 安全域:

  • filesystem-realm
  • jdbc-realm
  • ldap-realm
  • 自定义安全域

如果您在 JBoss EAP 外部对凭据来源进行更改,则这些更改只有在底层安全域支持时才会传播到 JBoss EAP 缓存域。特别是 ldap-realm 支持侦听,但 ldap-realm 内过滤的属性(角色 )不支持。

为确保缓存域具有正确的用户数据缓存,建议您通过缓存域而不是您的凭据来源来修改用户属性。或者,您也可以清除缓存

重要

通过缓存域进行用户更改仅作为技术预览提供。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

配置和使用 缓存域

  1. 创建现有的安全域。

    您需要一个现有的安全域来 用于缓存域。例如,您可以创建一个 类似于使用基于文件系统 的身份存储配置身份验证中的步骤的文件系统 域。

    filesystem-realm 示例

    /subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir)
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1)
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=user1, clear={password="password123"})
    
    /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1,name=Roles,value=["Admin","Guest"])
    
    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)

  2. 创建 缓存域.

    具有要缓存的现有域后,创建一个引用它的 缓存域

    使用 exampleFsRealm 的缓存域示例

    /subsystem=elytron/caching-realm=exampleCacheRealm:add(realm=exampleFsRealm)

  3. 使用 缓存域.

    创建 缓存域 后,您可以像任何其他安全域一样在安全配置中使用它。例如,您可以在相同位置使用 文件系统域,通过基于文件系统的 身份服务在配置身份验证时使用文件系统域。

    使用 cache-realm 配置示例

    /subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleCacheRealm, role-decoder=from-roles-attribute}], default-realm=exampleCacheRealm, permission-mapper=default-permission-mapper)
    
    /subsystem=elytron/http-authentication-factory=example-fs-http-auth:add(http-server-mechanism-factory=global, security-domain=exampleFsSD, mechanism-configurations=[{mechanism-name=BASIC, mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])

您可以使用 caching- realmmaximum-entries 和 maximum- age 属性来控制缓存大小和项目过期时间。 有关这些属性的详情,请参阅如何配置服务器安全性的 Elytron Subsystem 组件参考一节

清除 缓存域 缓存

您可以使用 clear-cache 命令清除现有的缓存。清除缓存会强制它使用来自安全域的最新数据进行重复。

/subsystem=elytron/caching-realm=exampleCacheRealm:clear-cache