谷 宁 静
(上海市人力资源和社会保障局信息中心 上海 200051)
为进一步推动“互联网+”政务服务,加快构建一体化的网上政务服务体系[1],在市委市政府的统一部署下,上海市人力资源和社会保障局坚持推进人才领域“一网通办”工作,通过“一网通办”促进人才落户引进工作效率提升。为了提升公众用户访问和业务管理部门运维效率,将“人才引进”、“持有《上海市居住证》人员申办本市常住户口”、“留学人员落户”、“外省市职工(家属)进沪”四个人才落户应用系统从原来分散的四个应用系统集成为一个统一的应用系统,并接入“一网通办大平台”。申报用户只需一次登录即可直接访问所有系统,同时关键业务信息和状态实时共享至一网通办大平台,实现数据整合。在支持单点登录的同时,允许各应用系统在全面升级系统前保留原有的登录账户信息和登录入口。为此,本文构建了基于“一网通办”的人才落户跨域单点登录(singlesign-on,SSO)系统。
本系统采用符合J2EE规范的B/S/S三层应用架构,基于分布式架构、应用云技术支撑框架进行设计。系统整体的IT架构如图1所示。
图1 技术架构框架
应用系统构建于应用系统技术支撑框架(核心框架)之上,为用户提供登录业务应用。PAAS平台提供了基础的PAAS支持,包括分布式缓存、分布式日志、分布式服务框架等,应用系统技术支撑框架(扩展框架)用于定义应用系统与分布式服务的接口。IAAS平台提供系统运行所依赖的基础设施,除开放架构的X86硬件设备以外,还应支持使用已有的小型机设备。
在技术架构设计上,本系统采用JavaEE体系和Spring核心框架。框架制定了分布式缓存、并行计算、分布式消息队列、非结构化存储可扩展技术服务的接口规范,对应用集成管理、组织机构管理、操作员管理、权限管理、日志跟踪管理等分布式应用管理功能进行封装,且分布式应用管理功能可在应用层面复用。在核心框架基础上,通过分布式技术产品扩展出相应的技术实现。采用SpringMVC作为控制层框架,应用开发需要按照SpringMVC控制器Controller的规范进行控制层实现。在控制层和视图层,通过SpringSecurity提供声明式的安全访问控制,通过动态令牌实现单点登录,基于角色模型实现URL权限聚合。
针对本系统架构面向互联网访问的应用特点,前端通过Nginx进行负载转发、静态文件处理;应用服务器采用WAS9的libertyprofile,作为前端页面运行环境;通过redis搭建缓存层集群,存储会话、字典表信息,采用zookeeper+dubbo的微服务架构;搭建日志平台及监控平台,方便日常运维及故障排查。
针对四个人才落户系统政策条线较多、受理操作复杂的情况,基于统一标准化运行环境,本系统通过改造登录模块来接入一网通办统一受理平台。各业务单位分拆现有受办一体的业务系统将现有业务系统中申报受理部分登录模块整体迁移至一网通办统一受理平台,纳入一网通办统一受理平台管理,并与统一平台数据交换中心对接。同时按照统一规范、统一标准进行用户认证、Web登录界面风格改造、数据实时共享。
一网通办单点登录实现涉及SSO认证中心的实现和人才落户系统登入登出模块、业务数据共享交换、权限模块的改造,各系统要能够与SSO统一认证中心进行通信,以实现授权令牌的校验、用户身份信息的获取及登入登出等请求处理,同时各种关键业务数据通过安全接口实时传输至一网通办大平台[2]。图2描述了整个系统的软件总体框架。
图2 软件总体框架
单点登录过程中完成令牌验证、身份信息、注销请求、统一审批编码、关键业务数据的传递。部门网上办事平台入口登录对应单部门上网中的“原有入口、统一编码”模式,即公众在部门网上办事平台通过点击“网上政务大厅用户登录”实现登录后,跳转到人社人才落户系统进行网上申报的模式。网上申报填写时通过数据交换接口来获取申请用户的基础信息进行预填。申请用户调用“登录获取安全令牌”接口获取安全令牌,再根据统一编码获取该办件信息以开展协同办理,中间的办理环节信息和结果信息通过数据交换接口反馈至一网通办统一受理平台的办件库和证照库。整体业务对接流程框架如图3所示。
图3 业务对接流程框架
人才落户事项网上办事入口必须与一网通办统一受理平台整合,由平台提供统一的入口。人才落户业务系统与统一受理平台实现跨域单点登录,即用户在统一平台登录后,跳转到人才落户业务系统迁入的系统进行填报时无需再次登录。登录流程如图4所示。
图4 登录流程
(1) 申请用户登录,调用“登录获取安全令牌”接口获取安全令牌,网上政务大厅给该用户授权一个动态的登录令牌access_token。
(2) 人才落户网上办事平台通过令牌校验接口和网上政务大厅颁发的私钥,向网上政务大厅请求验证令牌。
(3) 网上政务大厅令牌验证通过后,将会返回该access_token所对应的用户信息,用户信息为json格式字符串。
(4) 生成本地用户,人才落户网上办事平台在令牌验证通过后,应确认网上政务大厅用户唯一id(zwdtsw_user_id)是否在用户库中关联,如未关联,则需新增一个用户,该用户部分信息可从验证登录令牌的接口中获取,用户生成后记录zwdtsw_user_id;如已关联,则根据名为zwdtsw_last_update的数据项,即该用户上一次更新时间,结合本地用户上一次更新时间进行更新。
整个单点登录系统主要依赖令牌access_token来验证身份,zwdtsw_user_id被用作唯一的身份信息,对应一个系统唯一的用户身份。身份信息是存储在access_token令牌中的一个用户身份明文信息,用来与公钥对签名验证的结果比对确认用户的身份。签名信息是使用非对称加密对一组身份信息的签名结果信息,用户登录系统使用公钥对其进行验证。令牌使用椭圆曲线签名算法(ECDSA)来实现验证,对令牌M进行椭圆曲线算法来签名[3]。access_token令牌组成结构如下:
{
“zwdtsw_user_id”:网上政务大厅用户唯一id
“cas_id”: 单位统一社会信用码
“nonce”:动态随机数
“exp”:Token失效时间
“iat”:Token签发时间
“签名信息”:SHA256加密
}
用户当前登录认证状态在四个人才落户系统和一网通办平台是否能够被共享是单点登入与登出的关键。本系统采用access_token登录令牌来实现用户当前登录认证状态的共享,并将该令牌存储在session会话里面,借此access_token令牌应用系统端可以区分登录用户身份。客户端的身份信息数据存储在Cookie里,客户每次访问时可读取这些身份数据来获取相应的权限。如果用户客户端的Cookie被禁用,则采用URL重写技术,使得用户端每次访问服务器端时可传回此session的ID和登录令牌。Cookie和URL重写技术的组合,可以确保整个应用系统服务器能获取到用户之间是否处在有效的登录会话中,同时获取到用户的身份及其他状态信息。申报单位已经登录A落户系统后再登录B落户系统时,不需要用户再次登录,但需要经过如下处理流程:
(1) 申报单位访问应用系统B。
(2) 应用系统B发现该用户无授权令牌未登录,则将该用户的身份信息和应用系统B的事项代码请求重定向到一网通办统一认证中心。
(3) 统一认证中心验证该用户的身份合法,发送动态登录令牌access_token,之后将携带授权令牌的申报单位用户重定向到系统B。
(4) 应用系统B将接收到的申报单位用户的登录令牌access_token向SSO统一认证中心发送令牌验证请求。
(5)SSO统一认证中心验证到令牌为有效的,则在本地用户表中登记系统B,并向系统B返回确认和其他必要的授权信息。
(6) 系统B与用户之间建立局部会话,本地保存授权令牌,为用户开放相应资源[4]。
统一编码由统一受理平台统一分发,贯穿审批及服务办理全过程。人才落户系统在用户暂存或者提交办件时,调用统一的接口获取编码,并将统一编码与办件绑定。一条统一编码只能绑定唯一一条业务办件。统一编码规则:统一编码由区域代码、事项大类码、事项类别码、事项申请年度和事项流水号组成,共15位阿拉伯数字。区域代码为其所属上海市行政区域代码表;事项的具体类别代码采用4位阿拉伯数字表示,以分段方式区分市、区两级事项[5];事项申请年度指生成统一编码的公历年度;事项流水号指事项当年的申请流水号,采用6位阿拉伯数字表示,每年从000001开始顺序编码。统一编码生成:业务单位在用户暂存或者提交办件时,调用下面的接口获取编码,并将统一编码与办件绑定。一条统一编码只能绑定唯一一条业务办件。编码结构如图5所示。
图5 统一编码结构
对数据交换平台服务接口访问时,采用签名/验签机制进行访问权限控制,未通过验签的请求会被拒绝。具体操作步骤如下:
(1) 服务授权信息:在一网通办平台进行数据交换服务的申请,首先获取到服务的授权信息,包括服务编码shgxjhpt_sid、appkey和请求者身份标识shgxjhpt_rid信息。根据前面获得的授权码(appkey),对请求者身份标识shgxjhpt_rid、服务标识shgxjhpt_sid和请求时间戳(shgxjhpt_rtime)进行计算签名,得到签名信息(shgxjhpt_sign)。
(2) 调用平台的签名密钥获取接口,将shgxjhpt_rid、shgxjhpt_sid、shgxjhpt_rtime和shgxjhpt_sign值传入接口中。
(3) 获取签名密钥:服务接口调用成功后会返回加密后的密钥(secret)及该密钥的有效期(secretEndTime),然后根据appkey使用AES解密算法对返回的信息进行解密,最终获得真正的签名密钥。使用appkey获得签名密钥后,默认密钥有效期为1天,返回值中提示了密钥过期时间,在此过期时间之前,不能频繁获取密钥。客户端每天0点进行密钥的获取和更新,并缓存到本地,当天服务调用时都使用此密钥。
(4) 在后续的服务接口调用过程中,首先使用签名密钥对请求者身份标识、服务标识和请求时间戳(shgxjhpt_rtime)进行计算签名,调用加密算法获取签名(sign),此签名有效期为5分钟。
(5) 在Headers中添加rid、sid、rtime、sign消息体,然后进行服务接口调用。该sign签名密钥可以连续多次使用,直至密钥过期或主动更新。
SSO认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作。人才落户系统整个单点注销流程如下所示:
(1) 申请单位用户向A系统发起注销请求。
(2)A系统获取该用户的令牌,然后向SSO认证中心发起注销请求,并撤销局部会话和全局会话,同时取出所有用此令牌注册的系统地址。
(3) 认证中心通知登记表中登记的其他应用系统,SSO认证中心向所有注册系统发起注销请求,销毁局部会话。
(4)SSO认证中心引导用户至登录页面,进行登出处理[4]。
为实现公众凭一网通办大平台登录后能在部门网上办事平台继续使用人才落户原有账号资源,如历史办件查询,部门网上办事平台应在用户信息完善页面一并提供原有用户关联功能。本文不采用完全集中的统一用户身份认证和授权机制,而是通过建立SSO系统的身份认证、授权机制与各应用系统原有账号之间的联系来完成[6]。公众输入原有用户账号信息,验证通过后实现一网通办大平台用户与之关联,即一网通办大平台唯一用户id与该账号实现关联,同时去除该id之前的关联。关联一网通办大平台用户,部门网上办事平台原则上可保留自身用户体系,但需在用户注册成功等页面添加“关联一网通办大平台大厅用户”按钮,提示公众可关联一网通办大平台大厅用户[7]。一网通办大平台大厅将会把单位法人一证通里的唯一身份标识码zwdtsw_user_id,即网上政务大厅用户唯一id传递到应用系统,在html页面需要插入一网通办大平台大厅登录按钮的位置,公众点击该按钮后,页面会跳转至网上政务大厅。公众在网上政务一网通办大平台大厅页面输入用户登录信息,如验证通过,则将该一网通办大平台大厅用户唯一id以名为zwdtsw_user_id的参数提交至data-redirect指向页面。部门确认该id是否已被其他用户关联,如未关联则实施关联,完成后提示关联成功,否则提示错误信息。
对于大型企业来说,每年落户申请人员众多,所以单位的法人一证通需要开通多个账号,但是每个账号的功能权限有所不同,有的只有填报功能,有的有材料审核上报和电子签章功能等。对于一网通办大平台,由于接入的委办应用系统众多,通过一网通办来具体管理所有权限可行性不高,故针对权限系统复杂的应用系统,如人才落户系统,这里设计了分层授权体系。对单位的法人一证通用户来说,设置了主key和非主key用户,首次登录的单位唯一用户设为主key,后续账号登录人才落户应用系统时,会提示让主key来进行授权行为,权限由主key设置完成后才能登录进行使用。这样既实现了一网通办统一登录,又可以让各应用系统灵活管理自己的权限菜单,方便后续管理[8]。
本系统主要为互联网用户提供服务。公众服务网互联网用户访问应用系统时需经过安全路由交换区的入侵防御、防毒墙、防火墙、WAF等安全设备,并将访问限制在前置交互区,无法直接访问业务应用区,接入时还配置了网闸做隔离,更加保障了安全性。建立独立的安全管理区,部署统一安全管理中心、数据库审计、网页防篡改、运维审计、日志审计、漏洞扫描、身份认证、移动终端管理等安全设施,为系统提供统一的安全服务。在应用层面上,申报用户必须使用上海市数字认证中心颁发的单位法人一证通登录,保证了用户身份证书的唯一性和机密性。本系统采用椭圆曲线签名加密算法生成动态令牌,对令牌进行了SSL加密传输,保证关键的登录身份信息在传输过程中不会被篡改。本系统对授权的用户设置唯一的统一审批编码,通过“签名+验签”和动态签名密钥机制数据实时交换接口接收的json申报信息保持数据共享,从而保证了数据的可用性。
人才落户“一网通办”系统投入应用以来,得到了社会各方的广泛好评。本系统基于分布式架构、应用云技术支撑框架进行设计,采用zookeeper+dubbo的微服务架构,将跨域SSO单点登录等技术进行分析﹑集成,实现了各业务系统统一身份认证、分层灵活授权管理的工作机制,允许各应用系统在全面升级系统前保留原有的登录账户信息和登录入口,保证系统无缝接入“一网通办平台”。同时基于事项统一审批编码的数据交换模式还为各业务部门实现了实时信息共享,消灭了“数据孤岛”,整合了全网数据,加快了构建一体化的网上政务服务体系,极大提升了人才落户引进工作效率。