13.4. 在 Web 应用程序里使用单点登录
概述
单点登录(Single Sign On,SSO)是通过 web 和 Infinispan 子系统提供的。请使用下列步骤在 web 应用程序里配置 SSO。
前提条件
- 你需要一个处理验证和授权的配置好的安全域。
- 你需要
infinispan
子系统。对于受管域它位于full-ha
配置集里,而对于独立服务器,你需要使用standalone-full-ha.xml
配置。 web
cache-container
和 SSO cache-container 都必须存在。配置文件示例已经包含了web
cache-container,而一些配置也已经包含了 SSO cache-container。请使用下列命令来检查并启用 SSO cache-container。请注意,这些命令修改了受管域的full
配置集。对于独立服务器,你可以修改这些命令来使用其他的配置集,或者去掉命令行的/profile=full
部分。例 13.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)
如果结果为success
,表示子系统存在。否则,你需要添加它。例 13.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")
/profile=ha/subsystem=infinispan/cache-container=web/transport=TRANSPORT:add(lock-timeout=60000)
/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode="ASYNC",batching=true)
例 13.3. 检查
SSO
cache-container运行下列管理 CLI 命令:/profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
找到类似于"sso" => {
的输出:如果没有找到则表示 SSO cache-container 没有在你的配置里出现。例 13.4. 添加
SSO
cache-container/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=sso:add(mode="SYNC", batching=true)
- 你需要配置
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")
- 你需要配置将共享 SSO 信息的每个应用程序以在
jboss-web.xml
里使用相同 <security-domain> 以及在web.xml
里使用相同的 Realm 元素。
群集和非群集 SSO 阀之间的区别
群集 SSO 允许在不同的主机间共享验证信息,而非群集的 SSO 不允许。群集和非群集的 SSO 阀的配置方式相同,但群集 SSO 包含了 cacheConfig
、processExpiresInterval
和 maxEmptyLife
参数,它们控制持久数据的群集复制。
例 13.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>
表 13.1. SSO 配置选项
选项 | 描述 |
---|---|
cookieDomain |
用于 SSO cookie 的主机域。默认为
/ 。要允许 app1.xyz.com 和 app2.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()
方法在程序里使会话失效。