CAS 单点登录

发送反馈


 

单点登录简介

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

单点登录就是专为解决上述问题而产生的。这里讲的单点登录(Single Sign On,SSO),主要是指 Web SSO。

为什么使用单点登录

使用单点登录的情况下,用户访问系统中的任何一个 GIS 服务器时,GIS 服务器都会将请求转发给认证服务器,由认证服务器进行用户身份的验证,用户此时需输入用户名/密码,验证通过后就可以继续访问 GIS 服务。同一个用户再去访问另一个 GIS 服务器时,该 GIS 服务器也会将请求转发给认证服务器,认证服务器确认该用户已经验证通过时,就会告知 GIS 应用服务器,用户就可以成功访问该服务器。在这一系列的访问过程中,用户只进行了一次登录,就可以访问系统中的所有 GIS 服务器,而认证服务器也只进行了一次用户身份验证,访问了一次用户数据库。

如果不使用单点登录,则用户访问不同的 GIS 服务器时,都需要登录才能访问。每一个 GIS 服务器都有自己的用户数据库,每次进行用户验证时都要各自读取用户数据库的信息。

使用单点登录

不使用单点登录

 

单点登录的优势体现在以下几个方面:

配置使用 CAS 单点登录

CAS(Central Authentication Service)是 Yale 大学发起的构建 Web SSO 的 Java 开源项目。iServer、iPortal 、iEdge  支持基于 CAS 的单点登录。用户配置单点登录时,需设置 CAS 认证服务器,CAS 认证服务器负责完成对用户信息的认定,可单独部署于网络环境中。在使用 CAS 单点登录之前需要先安装、配置 CAS,详细步骤请参考 CAS 的安装与配置

启用单点登录

访问服务管理器(WebManager),点击“安全”页面的“CAS登录配置”选项卡,勾选“是否启用”后,需设置 CAS 中的用户属性字段和 CAS 服务的地址,点击“保存配置”后生效。其中:

配置 CAS 用户属性和 iServer/iPortal/iEdge 角色的关联

 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

...

针对 iPortal 的额外配置

进行完以上配置,以 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 3.4.9 以下版本的额外配置

如果您使用的 CAS Server版本较低(针对 CAS Server 3.4.9 以下版本),还需要在iPortal 包的 webapps/iportal/WEB-INF 目录创建 classes/META-INF/cas 文件夹,然后在 cas 文件夹中创建 samlRequestTemplate.xml 文件,方可实现 iPortal 与 CAS Server 间的单点登录,其内容为:

<!--

Licensed to Jasig under one or more contributor license agreements. See the NOTICE

file distributed with this work for additional information regarding copyright ownership.

Jasig licenses this file to you under the Apache License,Version 2.0 (the "License");

you may not use this file except in compliance with the License. You may obtain a copy

of the License at the following location:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under

the License is distributed on an  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS

OF ANY KIND, either express or implied. See the License for the specific language

governing permissions and limitations under the License. -->

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:oasis:names:tc:SAML:1.0:protocol">

<soap:Header/>

<soap:Body>

<Request MajorVersion="1" MinorVersion="1" RequestID="%s" IssueInstant="%s">

<samlp:AssertionArtifact> %s</samlp:AssertionArtifact>

</Request>

</soap:Body>

</soap:Envelope>

使用 CAS 用户登录

启用了单点登录以后,就可以使用 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

...