CAS 单点登录 |
在一个完善的 GIS 系统中,可能有很多台服务器协同工作,部署了 iPortal、多个 iServer、多个 iEdge 节点,访问这些 GIS 服务器节点时,就需要在各个产品/节点间频繁切换。通常情况下,各个 GIS 服务器节点的账户都不一样,记住这些各不相同的用户名/密码是非常困难的。如果特意为不同的 GIS 服务器节点设置相同的密码,则安全性又进一步降低,且切换节点时频繁登录依然浪费时间。

单点登录就是专为解决上述问题而产生的。这里讲的单点登录(Single Sign On,SSO),主要是指 Web SSO。
使用单点登录的情况下,用户访问系统中的任何一个 GIS 服务器时,GIS 服务器都会将请求转发给认证服务器,由认证服务器进行用户身份的验证,用户此时需输入用户名/密码,验证通过后就可以继续访问 GIS 服务。同一个用户再去访问另一个 GIS 服务器时,该 GIS 服务器也会将请求转发给认证服务器,认证服务器确认该用户已经验证通过时,就会告知 GIS 应用服务器,用户就可以成功访问该服务器。在这一系列的访问过程中,用户只进行了一次登录,就可以访问系统中的所有 GIS 服务器,而认证服务器也只进行了一次用户身份验证,访问了一次用户数据库。
如果不使用单点登录,则用户访问不同的 GIS 服务器时,都需要登录才能访问。每一个 GIS 服务器都有自己的用户数据库,每次进行用户验证时都要各自读取用户数据库的信息。
|
|
|
|
使用单点登录 |
不使用单点登录 |
单点登录的优势体现在以下几个方面:
CAS(Central Authentication Service)是 Yale 大学发起的构建 Web SSO 的 Java 开源项目。iServer、iPortal 、iEdge 支持基于 CAS 的单点登录。用户配置单点登录时,需设置 CAS 认证服务器,CAS 认证服务器负责完成对用户信息的认定,可单独部署于网络环境中。在使用 CAS 单点登录之前需要先安装、配置 CAS,详细步骤请参考 CAS 的安装与配置。
访问服务管理器(WebManager),点击“安全”页面的“CAS登录配置”选项卡,勾选“是否启用”后,需设置 CAS 中的用户属性字段和 CAS 服务的地址,点击“保存配置”后生效。其中:

iServer、iPortal、iEdge 可通过已有角色与 CAS 用户属性的关联来识别不同 CAS 用户的权限,如某 CAS 用户属性关联了某 iServer 已有角色,则表示具有了与该角色相同的权限。
CAS 属性值与 iServer、iPortal、iEdge 的已有角色的关联,二者是多对多关系。例如,iServer 的内置角色 USER、PUBLISHER、ADMIN 分别默认匹配 cas_USER、cas_Publisher、cas_ADMIN 三个 CAS 用户属性,如果 CAS 服务器指定关联字段中没有这三个属性值,则该关联不生效。
点击“添加属性角色配置”按钮,可以添加新的 CAS 用户属性值,并为其设置与 iServer、iPortal、iEdge 中已有角色的关联。
如果需要 CAS Server 登录、登出的地址与 CAS Server 认证地址不同时(例如:CAS Server 服务器运行在双网卡或多网卡的网络环境中,CAS Server 登录、登出的地址与 CAS Server 认证地址使用不同的 ip),在以上配置的基础上,可以通过编辑 shiro.ini 文件(位于【SuperMap iServer 安装目录】\webapps\iportal\WEB-INF 下),增加一个 casRealm.casLoginLogoutPrefix 参数来配置 CAS Server 登录、登出的地址。如下面粗体的代码所示:
casRealm.enabled = false
casRealm.reserveSystemAccount = true
casRealm.casServerUrlPrefix = http://{ip}:{port}/cas
casRealm.casLoginLogoutPrefix=http://{ip}:{port}/cas
...
进行完以上配置,以 CAS 用户登录 iPortal 后,可以浏览地图、服务等,但不能进行创建地图、注册服务等操作,此时还需进行额外的配置。编辑 shiro.ini 文件(位于【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF 下),修改 casRealm 变量,增加一个 casRealm.backRealm 参数,如下面粗体的两行代码所示,并将 iserver_att 修改为设置的 CAS 用户属性字段。编辑完 shiro.ini 文件后需要重启 iPortal 服务。
...
casRealm = com.supermap.iportal.security.IportalCasRealm
casRealm.attributeRuleMapping = iserver_att={cas_SYSTEM=[SYSTEM,ADMIN],cas_PUBLISHER=[PUBLISHER],cas_USER=[USER]}
...
usernamepasswordrealm = com.supermap.services.security.BuiltInTokenSupportedRealm
casRealm.backRealm = $usernamepasswordrealm
...
注意:
启用了单点登录以后,就可以使用 CAS 用户访问受保护的服务或登录服务管理器了。如果配置单点登录时勾选了“保留内置账户登录”,则访问受保护的服务或服务管理器时,登录界面如下图所示。可以选择使用 iServer 原有的用户直接登录,或者点击“使用 CAS 账号登录”后,跳转到 CAS 用户的登录界面,CAS 用户即可登录。CAS 服务器验证成功后,用户就可以访问 iServer 的服务以及关联到该 CAS 服务器的所有 iServer、iEdge 以及 iPortal 的 GIS 服务。

如果启用单点登录时没有勾选“保留内置账户登录”,则访问受保护的服务或服务管理器时,直接跳转到 CAS 服务器的登录界面。
启用 iPortal 的单点登录不能通过 iPortal 首页(“http://localhost:8190/iportal/”)登录,而需要通过“http://localhost:8190/iportal/services/security/login”进行登录。
注意:
如果 CAS 认证服务器和 GIS 服务器不在同一台机器上,由于两台机器的系统时间差,可能导致登录验证不成功,这时需要调整两台机器的系统时间保持一致,或延长容错时间间隔,iServer(或 iPortal、iEdge)默认的系统时间差容限为 3 分钟。修改容错时间差容限的方法是编辑 shiro.ini(WEB-INF 下),修改 casRealm.tolerance 参数(单位为毫秒)如下:
...
casRealm.enabled = true
casRealm.reserveSystemAccount = true
casRealm.casServerUrlPrefix = http://{ip}:{port}/cas
casRealm.casService = http://{ip}:{port}/{contextPath}/shiro-cas
casRealm.securityInfoDAO = $sqliteRealm
casRealm.tolerance = 180000
...