16.4. 在 Web 应用程序里使用单点登录


概述

单点登录(Single Sign On,SSO)是通过 web 和 Infinispan 子系统提供的。请使用下列步骤在 web 应用程序里配置 SSO。

前提条件

  • 你需要一个处理验证和授权的配置好的安全域。
  • 你需要 infinispan 子系统。对于受管域它位于 full-ha 配置集里,而对于独立服务器,你需要使用 standalone-full-ha.xml 配置。
  • webcache-container 和 SSO cache-container 都必须存在。初始配置文件已经包含了 web cache-container,而一些配置也已经包含了 SSO cache-container。请使用下列命令来检查并启用 SSO cache-container。请注意,这些命令修改了受管域的 ha 配置集。对于独立服务器,你可以修改这些命令来使用其他的配置集,或者去掉命令行的 /profile=ha 部分。

    例 16.1. 检查 web cache-container

    上面提及的配置集和配置在默认情况下包括 web cache-container。请使用下列命令来检验它的存在。如果你使用了不同的配置集,请用这个配置集的名称来替换 ha
    /profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=false,proxies=false,include-runtime=false,include-defaults=true)
    Copy to Clipboard Toggle word wrap
    如果结果为 success,表示子系统存在。否则,你需要添加它。

    例 16.2. 添加 web cache-container

    请使用下列三个命令来启用你的配置里的 web cache-container。修改配置集的名称以及其他参数。这里的参数是用于默认配置的。
    /profile=ha/subsystem=infinispan/cache-container=web:add(aliases=["standard-session-cache"],default-cache="repl",module="org.jboss.as.clustering.web.infinispan")
    Copy to Clipboard Toggle word wrap
    /profile=ha/subsystem=infinispan/cache-container=web/transport=TRANSPORT:add(lock-timeout=60000)
    Copy to Clipboard Toggle word wrap
    /profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode="ASYNC",batching=true)
    Copy to Clipboard Toggle word wrap

    例 16.3. 检查 SSO cache-container

    运行下列管理 CLI 命令:
    /profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
    Copy to Clipboard Toggle word wrap
    找到类似于 "sso" => { 的输出:
    如果没有找到则表示 SSO cache-container 没有在你的配置里出现。

    例 16.4. 添加 SSO cache-container

    /profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=sso:add(mode="SYNC", batching=true)
    Copy to Clipboard Toggle word wrap
  • 你需要配置 web 子系统来使用 SSO。下面的命令在名为 default-host 的虚拟服务器和 cookie 域 domain.com 上启用了 SSO。缓存名称是 sso,重新验证是禁用的。
    /profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web",cache-name="sso",reauthenticate="false",domain="domain.com")
    Copy to Clipboard Toggle word wrap
  • 你需要配置将共享 SSO 信息的每个应用程序以在 jboss-web.xml 里使用相同 <security-domain> 以及在 web.xml 里使用相同的 Realm 元素。
群集和非群集 SSO 阀之间的区别

群集 SSO 允许在不同的主机间共享验证信息,而非群集的 SSO 不允许。群集和非群集的 SSO 阀的配置方式相同,但群集 SSO 包含了 cacheConfigprocessExpiresIntervalmaxEmptyLife 参数,它们控制持久数据的群集复制。

例 16.5. 群集 SSO 配置示例

因为群集和非群集 SSO 配置是如此的相似,所以我们只列出了群集 SSO 的配置。这个例子使用了一个名为 tomcat 的安全域。
<jboss-web>
	<security-domain>tomcat</security-domain>
	<valve>
		<class-name>org.jboss.web.tomcat.service.sso.ClusteredSingleSignOn</class-name>
		<param>
			<param-name>maxEmptyLife</param-name>
			<param-value>900</param-value>
		</param>
	</valve>
</jboss-web>
		

Copy to Clipboard Toggle word wrap
Expand
表 16.1. SSO 配置选项
选项 描述
cookieDomain
用于 SSO cookie 的主机域。默认为 /。要允许 app1.xyz.comapp2.xyz.com 共享 SSO cookie,你可以设置 cookieDomain 为 xyz.com
maxEmptyLife
只适用于群集 SSO。没有活动会话的 SSO 阀可被请求所使用的最长时间(秒)。正值允许正确处理节点的关闭,如果它是唯一带有附加到阀的会话的节点的话。如果 maxEmptyLife 被设置为 0,当本地会话复制时阀将终止,但会从群集应用程序里备份会话以供其他群集节点使用。允许阀超过其受管会话的生命周期给了用户进行其他请求的时间,以便失效切换到不同的节点,从而可以激活会话的备份。它默认为 1800 秒(30 分钟)。
processExpiresInterval
只适用于群集 SSO。阀寻找和使已超过 MaxEmptyLife 的 SSO 实例失效的最长时间(秒)。默认为 60 秒(1 分钟)。
requiresReauthentication
如果为 true,每个请求都使用缓存的凭证来重新验证安全域。如果为 false(默认值),对于这个阀来说,有效的 SSO cookie 就足够验证每个新的请求了。
使会话失效

应用程序可以通过调用 javax.servlet.http.HttpSession.invalidate() 方法在程序里使会话失效。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat