CAS 集成用户已有的账户系统

发送反馈


如果您在使用 SuperMap iPortal 前,已经拥有了完整的用户账户系统,并希望能够将已有的账户系统直接对接到 iPortal,而无需在 iPortal 中进行重建,iPortal 为您提供了基于 CAS 的方式来集成已有的用户账户系统。

下述配置过程中,为便于介绍配置项,均以用户账户系统为 MySQL 数据库为例进行说明。

添加账户类型字段

在用户应用系统账号中新增一个字段,字段名为 usertype(也可以命名为其他名称),对每个账号设置该字段的值,每个值都用于对应 iPortal 中的角色信息,这里设置字段的值可以是 cas_ADMIN、cas_PORTAL_USER、cas_PORTAL_VIEWER。根据每个用户的级别不同,分别设置 usertype 字段的值,cas_ADMIN 对应 iPortal 中的管理员角色,cas_PORTAL_USER 对应普通用户角色,cas_PORTAL_VIEWER 对应查看者角色。可以使用 SQL 语句批量设置 usertype,方便快速。

安装与配置 CAS

有关 CAS 的安装与配置,可以参见:CAS 的安装与配置。需要注意的是,该安装流程介绍的是 iServer/iPortal/iEdge 进行单点登录的配置,因此需要创建 SuperMap GIS 服务器间共用的用户账户数据库。在这里,由于您已拥有存储用户账户信息的数据库,因此无需创建数据库,而是根据您的用户账户系统的实际情况,替换示例中的数据库名与表名。

启用 CAS 登录

以 iPortal 管理员身份登录门户首页,依次点击“管理”>“安全”>“CAS 登录配置”,进入 CAS 登录配置页面,进行如下配置:

勾选“是否启用”后,需设置 CAS 中的用户属性字段和 CAS 服务访问的地址,点击“保存配置”后生效。其中:

配置完成后,点击“保存配置”即可生效。

 

SuperMap iPortal 通过已有角色与 CAS 用户属性的关联来识别不同 CAS 用户的权限,某 CAS 用户属性关联了某 iPortal 已有角色,则表示具有了与该角色相同的权限。

CAS 属性值与 iPortal 已有角色的关联,二者是多对多关系。例如,iPortal 的管理员角色 ADMIN 默认匹配了 cas_ADMIN 用户属性,如果 CAS 服务器指定关联字段中没有这个属性值,则该关联不生效。

点击“添加属性角色配置”按钮,可以添加新的 CAS 用户属性值,并为其设置与 iPortal 已有角色的关联,如设置普通用户角色 PORTAL_USER 匹配 cas_PORTAL_USER 属性值,查看者角色 PORTAL_VIEWER 匹配 cas_PORTAL_VIEWER 属性值。用户只有关联了 ADMIN、PORTAL_USER 或 PORTAL_VIEWER 角色,才能以 CAS 用户账号登录 iPortal 首页,否则在 iPortal 首页会显示未登录状态。

额外配置

1. 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

...

注意:

2. 统一登录方式配置

以上配置完成后,iPortal 门户的登录页面已支持使用 CAS 账户登录,但 iPortal 内置 WebApps 中的登录页面还不能使用 CAS 账户登录。此时,您还需要在【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF 文件夹下的 iportal.xml 配置文件中,通过 <authenticationDelegation> 节点的<enable>子节点元素来开启身份验证委托机制,实现 iPortal 各页面登录方式的统一。编辑完 iportal.xml 文件后无需重启 iPortal,刷新页面即可生效。

其他可选配置

如果需要 CAS Server 登录、登出的地址与 CAS Server 认证地址不同时(例如:CAS Server 服务器运行在双网卡或多网卡的网络环境中,CAS Server 登录、登出的地址与 CAS Server 认证地址使用不同的 ip),在以上配置的基础上,可以通过编辑 shiro.ini 文件(位于【SuperMap iPortal 安装目录】\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

...

iPortal 和用户的应用系统实现单点登录

按以上步骤配置后,用户应用系统的账户可以登录到 iPortal,并可以进行制作地图等操作,但是用户应用系统和 iPortal 并未实现单点登录,现在只实现了用户应用系统的账户能登录 iPortal。若要实现用户应用系统和 iPortal 之间实现单点登录,需要修改用户应用系统的 web.xml,使得登录用户应用系统需要 CAS 登录验证。但是这只实现了登录验证,如果用户应用系统需要更加细致的权限验证,比如某些 url 只能由某些用户访问,则需要进行 CAS 扩展开发。

通过 CAS 方式登录 iPortal,我的账户->我的信息将屏蔽修改个人信息的功能,如果用户需要修改账户信息,比如修改昵称,可以打开屏蔽的“我的信息”页面,或者用户自己对页面做扩展开发,加上修改用户昵称的页面,然后通过调用 iPortal 的修改昵称资源实现。注意需要同步 CAS 连接的用户账户信息里的昵称和 iPortal 用户表中记录的用户昵称,使得它们保持一致。