【问题标题】:JBoss SSO CacheJBoss SSO 缓存
【发布时间】:2026-02-19 04:20:11
【问题描述】:

我们已经成功地在一个有两个节点的 JBoss EAP 6.3 集群中配置了 SSO。

问题是,我不明白我们必须创建的名为“sso”的复制缓存与我们的安全域(域与 ldap 连接)中的缓存类型(设置为默认值)之间的关系.

安全域使用该复制缓存?使用哪个缓存?因为我们要为缓存配置一个超时时间,所以如果 ldap 发生变化,缓存就会刷新。

这种情况的一个常见示例是当用户获得新权限时,他想立即或在短时间内访问新功能。实际上我们必须重新启动整个JBoss,这根本不好。

谢谢, 问候。

【问题讨论】:

    标签: jakarta-ee caching jboss ldap single-sign-on


    【解决方案1】:

    在集群模式下,SSO缓存用于在一个节点上对用户进行身份验证(身份验证发生在安全域中),身份验证会自动传递到集群中的其他节点。 p>

    安全域缓存用于加速身份验证检查,这可以在具有复制缓存的节点之间共享。但是缓存中存在凭据并不能保证它在应用程序中经过身份验证。

    例如,如果您将sso的属性reauthenticate设置为true,则该属性是一个标志,用于确定每个请求是否需要重新认证到securityRealm。设置为 true 可以允许具有不同安全域配置的 Web 应用程序共享 SSO

    希望对你有所帮助。

    【讨论】:

    • 我们已经将 reauthenticate 属性设置为 true。问题是当用户登录时,它没有从 ldap 刷新角色。取而代之的是从某种缓存中获取角色。为了测试该场景,我们更改了为指定用户分配的角色,并使用同一用户注销,然后登录,但没有任何变化。
    • @Mateo 尝试为类别 org.jboss.security.auth.spiorg.jboss.as.web.sso 启用跟踪级别,并通过再次执行用户登录来验证这一点,并且不会从 JAAS 缓存中获取
    【解决方案2】:
    <security-domain flushOnSessionInvalidation="true" >OUR_DOMAIN</security-domain>
    

    通过 jboss-web.xml 上的那一行,我们得到了我们正在寻找的行为。

    【讨论】: