案例分享 | 基于业务中台,如何实现账号与权限统一管理?
高校智慧校园建设旨在改变师生与学校资源、环境的交互方式,开展以人为本的个性化服务,进而建立智能开放的教育环境和便利舒适的生活环境。
随着现代信息技术的发展与校园网络提供的信息服务质量的提升,对信息安全的要求越来越高,同时对用户的身份认证、权限管理的要求也相应提高。原来各个应用系统各自为政的身份认证与权限管理的方式难以达到要求,这就必须要有一个统一的、高安全性和高可靠性的身份认证及权限管理系统。
该系统可以完成对整个校园网用户的身份和权限管理,保证各应用系统基于统一的模式、集中的环境开发与升级,一方面降低了系统整体运行的维护成本,另一方面保证了整个校园系统能够随着平台的升级而同步升级,方便使用和管理,也保证了整个系统的先进性与安全性。
随着“中台”概念的兴起与广泛应用,构建统一的认证与权限管理业务中台,统一管理校内信息系统的账号与权限,具有重要意义。
统一身份认证账号与
权限管理流程
基于目前智慧校园建设的现状,众多在用信息系统都开发了独立的账号与权限管理功能,因此,业务中台采取了“兼容现状、统一管理”的建设方针,保留信息系统的账号与权限模块,但统一由业务中台管理。由此形成了以业务中台为中心,统一管理账号与权限,并下发给信息系统的基本管理流程。
1.统一身份认证账号管理
统一身份认证账号的全生命周期包括创建、变更、关闭三个阶段,形成了账号管理的完整闭环。
账号的创建以数据中心的人事系统、教学系统数据为源头。当新生信息录入教学系统或新入职教职工信息录入人事系统后,业务中台获取到新的数据,创建统一身份认证账号,并通过消息中间件将新增账号下发给信息系统。
账号的变更主要包括账号对应的师生用户基本信息的变更、账号身份的变更(如普通教职工转化为教学秘书、科研秘书转化为部门办公室主任等)、账号有效期的变更等。当业务中台获取到变更的数据后,首先变更统一身份认证账号,然后通过消息中间件将变更账号下发给信息系统。
账号的关闭由业务中台根据统一身份认证账号的有效期统一管理。有效期到期的账号不能继续使用,无法获得统一身份认证服务。
业务中台以管理的统一身份认证账号为基础,通过“认证中心”模块,为校园信息系统提供统一身份认证服务。
2.权限管理
权限的全生命周期包括创建、变更、撤销三个阶段,形成了权限管理的完整闭环。
权限的创建随统一身份认证账号的创建一同完成,并随账号一起下发。统一身份认证账号在业务中台被创建时,带上了身份信息,如普通教职工、学院部门领导、本科生、研究生等,账号与权限管理中心根据账号的身份信息,自动创建初始权限。
权限的变更主要由教职工组织机构的变更、账号身份信息的变更引起,需要由教职工主动发起权限申请流程。流程审批结束后,由业务中台调用相关系统提供的权限变更接口自动完成。
权限的撤销主要由教职工的离职、退休引起。账号与权限管理中心自动撤销其权限,并将数据通过消息中间件下发给信息系统,由信息系统完成相关权限的撤销。
统一身份认证与
权限管理业务中台构建
智慧校园统一身份认证与权限管理业务中台包括五个组成部分:账号同步程序、账号与权限管理中心、认证中心、数据下发中间件、权限申请程序,如下图所示。
智慧校园统一身份认证与权限管理业务中台架构
账号同步程序:负责从人事系统、教学系统中将教职工、学生信息同步到账号与权限管理中心,并为账号加上身份信息。身份信息用于对账号的统一管理与权限的创建。
账号与权限管理中心:存储全校所有的统一身份认证账号及其权限。账号包含用户基本信息(学/工号、姓名、证件类型、证件号、所属部门等)、身份信息、账号有效期等,账号有效期用于关闭账号。权限包含所属系统、权限代码、权限名称等。账号与权限管理中心也是数据下发中间件的生产者,将新增、变更、离职或退休的账号及其权限打上相应的标记并放入数据下发中间件。
数据下发中间件:完成将新增账号、变更账号、离职或退休账号、新增权限、撤销权限异步下发给信息系统。采用了RabbitMQ消息中间件,信息系统为其消费者。
权限申请程序:当教职工的基本信息变更(主要为所属部门)或身份信息变更时,业务中台并不自动变更其在各个信息系统的权限,而由教职工本人主动发起权限变更的申请,删除已有的权限,并申请新的权限。在权限申请流程审核完成后,业务中台统一调用相关信息系统的权限变更接口,完成权限变更。
1.账号同步程序
账号同步程序是由Java语言开发的定时job,并使用了数据库触发器技术。定义了如下数据库视图或表:
数据库视图tmp_teach_stu:包括从数据中心读取的全部应进入业务中台的账号;
数据库表uids_tmp_duct_user和uids_tmp_user:临时表,用于比对数据,判断是新增账号、变更账号还是离职/退休账号。
账号同步程序的基本实现过程为:
清空uids_tmp_duct_user表;
将视图tmp_teach_stu INNER JOIN uids_tb_organize表后写入uids_tmp_duct_user表;
uids_tmp_duct_user表中每写入一条数据,则根据userid(学/工号,每个账号都是唯一的)查找uids_tmp_user表中是否存在。如存在,更新uids_tmp_user表;不存在,则插入到uids_tmp_user表,同时将该记录的数据类型标识为“new”、status字段置为“Y”;
uids_tmp_user表中每条记录更新前,对比新旧记录的字段,将有变化记录的status字段置为“Y”。如果变化的字段是“聘用类型”,且由“在职”变为“离职”或“退休”,则将该记录的数据类型标识为“quit”,其他字段的变化均标识为“update”;
读取uids_tmp_user表中status为“Y”的记录,保存到账号与权限管理中心。
2.账号与身份管理中心
账号与权限管理中心是业务中台的重要组成部分,由Java语言开发,存储统一身份认证账号及其权限信息。账号以身份统一创建权限,撤销时则根据其在信息系统的所有实时权限的汇总。主要定义了如下数据库表:
数据库表uids_dm_accounttype:存储身份类型信息;
数据库表uids_tb_account和uids_tb_user:存储全校所有的统一身份认证账号,包含用户基本信息(学/工号、姓名、证件类型、证件号、所属部门等)、身份信息、账号有效期等;
数据库表uids_ref_typerole:存储身份类型与权限关系,用于新增账号初始化权限;
数据库视图uids_sys_accountrole:汇总账号在信息系统的所有权限,用于撤销权限。
3.认证中心
认证中心也是业务中台的重要组成部分,由Java语言开发,底层使用了耶鲁大学的开源SSO方案CAS(Central Authentication Service),为信息系统提供统一身份认证服务。
4.数据下发中间件
数据下发中间件的生产者为账号与权限管理中心,消费者为信息系统。由于是一个生产者将数据全部下发给多个消费者,因此采用了RabbitMQ的“fanout”模式,把交换机(Exchange)里的消息发送给所有绑定该交换机的队列。
关于消息中间件RabbitMQ及其工作模式,不作为本文的主要内容。对于新增的信息系统,只需要定义自己的队列名称,并绑定到RabbitMQ的Exchange即可。
5.权限申请程序
权限申请程序是由Java语言开发的应用,是一个完整的权限申请、审批、配置流程。当教职工所需系统权限与实际权限不符时,首先提交权限申请,可以申请删除已有的权限和增加新的权限。
申请提交后,经过其所在部门领导审批、权限管理部门审批后,由业务中台调用相关系统的权限变更接口自动完成权限的变更。业务系统的权限变更接口按业务中台的规范统一提供,包含删除权限和增加权限两类。
基于业务中台的账号与
权限的全生命周期管理
1.账号的全生命周期管理
(1)账号创建
账号同步程序在同步人事、教学系统的用户信息时,如果判断是新增账号,则在账号与权限管理中心新增一个统一身份认证账号,并加上身份信息、账号有效期。
然后账号与权限管理中心将该账号的信息(包括学/工号、姓名、性别、所属部门、证件类型、证件号、账号创建日期)转化为json字符串,并加上“datatype”字段(取值为“new”),放入消息中间件RabbitMQ。信息系统异步读取RabbitMQ队列中的数据,完成本系统账号的创建。
账号创建过程的伪代码如下:
账号与权限管理中心:
while {
新增并保存一个账号;
将账号信息封装为json字符串并增加“datatype”字段取值为“new”;
将json字符串发送给RabbitMQ;
}
信息系统:
while {
从RabbitMQ队列读取一条json数据;
If (该数据“datatype=new”) {
在本系统创建新的账号;
}
}
(2)账号变更
账号同步程序在同步人事、教学系统的用户信息时,如果判断是变更账号,则更新账号与权限管理中心中的该账号信息。然后账号与权限管理中心将该账号的信息转化为json字符串,并加上“datatype”字段(取值为“update”),放入消息中间件RabbitMQ。信息系统异步读取RabbitMQ队列中的数据,完成本系统账号的更新。
账号变更过程的伪代码如下:
账号与权限管理中心:
while {
更新账号信息;
将账号信息封装为json字符串并增加“datatype”字段取值为“update”;
将json字符串发送给RabbitMQ;
}
信息系统:
while {
从RabbitMQ队列读取一条json数据;
If (该数据“datatype=update”) {
在本系统更新账号;
}
}
(3)账号关闭
业务中台根据统一身份认证账号的有效期关闭账号。关闭的账号无法使用统一身份认证服务,也就无法使用校园的各类信息系统。
2.权限的全生命周期管理
(1)权限创建
账号与权限管理中心在下发新增账号时,同时下发账号的权限信息。因此,账号创建的伪代码中应加上权限创建的内容,完整描述如下:
账号与权限管理中心:
while {
新增并保存一个账号;
为该账号创建权限;
将账号及其权限信息封装为json字符串并增加“datatype”字段取值为“new”;
将json字符串发送给RabbitMQ;
}
信息系统:
while {
从RabbitMQ队列读取一条json数据;
If (该数据“datatype=new”) {
在本系统创建新的账号;
在本系统为该账号创建权限;
}
}
(2)权限变更
基于业务中台的权限变更流程为,教职工主动发起权限变更申请,通过权限申请程序完成申请的提交、审批过程。在申请审批完成后,由权限申请程序调用相关系统提供的权限变更接口,自动完成权限的变更。
(3)权限撤销
账号同步程序在同步人事、教学系统的用户信息时,如果判断是离职或退休账号,则更新该账号的有效期信息。然后账号与权限管理中心将该账号及其撤销的权限转化为json字符串,并加上“datatype”字段(取值为“quit”),放入消息中间件RabbitMQ。信息系统异步读取RabbitMQ队列中的数据,完成本系统该账号权限的撤销。
权限撤销过程的伪代码如下:
账号与权限管理中心:
while {
更新账号的有效期信息;
得到账号应撤销的权限;
将账号及应撤销的权限信息封装为json字符串并增加“datatype=quit”;
将json字符串发送给RabbitMQ;
}
信息系统:
while {
从RabbitMQ队列读取一条json数据;
If (该数据“datatype=quit”) {
撤销该账号的权限;
}
}
本文描述了一种智慧校园账号与权限全生命周期管理的方案。基于该方案搭建的业务中台主要包括五个部分:
账号同步程序
账号与权限管理中心
认证中心
数据下发中间件
权限申请程序
在账号管理方面,首先由账号同步程序从数据中心同步教师与学生信息,数据在账号与权限管理中心被统一存储与管理后,再通过消息中间件RabbitMQ下发给信息系统,实现了账号创建、变更、关闭的全生命周期管理。
在权限管理方面,通过对账号基本身份的定义,随新建账号的下发完成权限的创建;对于权限的变更,由用户主动发起权限申请流程,审批结束后,由业务中台调用相关系统的接口完成;对于权限的撤销,当教职工离职或退休时,将数据通过消息中间件RabbitMQ下发给信息系统,从而实现了权限创建、变更、撤销的全生命周期管理。
该方案已于2015年在上海财经大学投入使用,经过四年的运行,目前管理各类身份的有效账号39000多个,共有18个业务系统实现了账号与权限的全生命周期管理,管理的权限共127项。
运行5年来,创建账号并开通权限共56171人,关闭账号共57351个,权限变更共1737个,权限关闭共21852个。在实际的应用中,业务中台体现出了高可靠性与高效性,并且账号与权限管理的全过程有完备的日志记录,便于审计与问题跟踪。
在业务中台的支撑下,新建设的系统可以不需要再单独创建账号与权限,而由业务中台提供相应的服务接口。这种基于统一的账号与权限管理业务中台的系统建设模式,也是未来智慧校园建设的一个探索方向。
作者:胡庆亮 王珊珊(上海财经大学信息化办公室)