论坛首页 Java版 企业应用

有关企业级统一用户认证和授权

浏览 4532 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2006-01-15
不知道各位有没有这方面的经验,希望能跟大家学习探讨一下
我先讲一下我这边的情况以及目标:

本人所在是一个年收入70亿的市级电信运营商,目标要将所有的异构的系统的用户进行统一管理,按照人力资源的数据设定局内用户的唯一实名,通过该用户名可以登陆企业内部所有系统,并且对所有用户的权限进行管理,展现用户的权限视图。

一 统一认证


这部分比较好实现,我们已经开发了相关的统一用户管理系统,用J2EE开发(JSP+ACTION+EJB+WEBSERVICE),先提供基本的用户认证WEBSERVICE接口以及相关的用户管理,认证接口只提供简单的用户和密码认证,并且识别该用户是否是有登陆相关系统的许可(只是简单的用户和系统间的对应关系,还不涉及操作权限与数据权限的认证),然后各系统按照要求改造自己本身的密码验证部分,也就是在验证时调用WEBSERVICE便可,因此该部分的设计与技术难度并不大,仅仅是在实施时清理各系统数千个用户,对一个用户对应多个用户的合并,对空闲用户的清理等比较吃力,并且由于其中不乏涉及业务和经营分析的生产系统,因此更是必须小心,但这部分可以用各种策略去实现,例如分用户群来逐步清理。
现在已经完成了CRM,IBSS,经营分析等系统的清理,并运行半年,按使用情况来看,是达到了预期效果的:
1 统一管理了相关系统的用户,当一个人离开单位时,全局用户管理员可以很方便的将该用户从统一用户系统中删除,这样该用户以后就不能登陆系统,而无须通知各系统的用户管理员去删除该用户
2 用户可以只记录一个唯一的用户名和密码就登陆若干个系统,当然用户名密码的保密要求就更高了,这就象你自己网上银行的密码一样,只能靠自己去保证安全性。
3 基本可以实现单点登陆,用户只要输入一次密码,就可以通过连接连到其他系统而无须再次输入密码,当然这个是有风险的,例如用户一单忘记了离开电脑,那么其他人就不单可以进入他目前正在使用的系统,还可以方便的进入该用户所被允许的其他系统,所以我们目前是不允许不输密码就连到其他系统,而是必须再输一便密码才能跳转。

二 统一授权
统一认证只是第一步,而要做到统一授权那么难度就将大大加大,因为全局大大少少上百个系统的权限管理是不一样,有些比较简单,只需要控制操作权限便可,而有些除了要控制操作权限,还要控制数据权限,因此要使统一用户管理系统能实现对各用户在不同系统的权限进行统一管理,授权那真是不容易的一件事情。
方法一:终极的要做到这点,估计直接的办法是将所有系统的权限控制部分都建在统一用户管理系统中,也就是首先统一用户管理系统在设计时就要能建立一个能适应各种系统权限管理要求的权限模型,实际上我们的周边系统概况决定了我们的统一用户管理系统采用的是RBAC权限模式。对于老系统各系统将自己的用户角色管理,角色-权限管理等部分抽离出来,放在统一用户管理系统中,而对于新系统,各系统在建设的初期就要把自己权限设计的要求提交给统一用户管理系统开发小组,让开发小组按照其需求在本身统一用户系统的权限模型上去构建出该系统的实例。那么管理员就可以通过统一权限系统为各用户在不同系统的权限进行配置,在登陆时各系统就调用相关的统一认证和授权接口,获取用户相关的权限信息XML,进到各系统后再创建用户,将相关的权限信息赋予给用户类,然后就可以在应用中如常一样进行权限验证。这种方式既能对用户进行统一的授权和认证,也能展现各用户的统一权限视图
风险:但这样做对统一用户系统的权限模型的设计要求太高,并且对开发小组人员的能力 要求也极高,所有开发人员必须要对局内每一个系统的权限要求甚至业务逻辑都理解透彻,同时各系统任何权限要求的修改都必须通知统一用户系统维护开发小组去完成,这将是一个恶梦(当然,如果开发人员还算多的话那只是恶梦,如果象我们这样只能抽3个人去开发维护该系统,这就是完全没可能)

方法二:
只在统一用户系统中建立用户和各系统角色的对应关系,这种方式就只能告诉统一用户管理人员,该用户在各系统有什么权限,但真正的赋权还是在各系统进行,各系统在新增角色或者为用户更改角色时只需要通过相关的同步接口通知统一用户管理系统就行,注意只是提供角色的描述,或者数据权限的简单描述,因为这样对统一用户系统的权限模型要求基本就不高了,只要能提供可对角色和操作进行描述的模型就行。因此统一用户系统并不能真正依赖这些信息来获取用户的正确的权限信息,统一用户认证接口并不把相关的角色或操作权限通过接口通各个实例系统,用户登陆后再在各系统权限模型中获取相关的操作权限和数据权限。
这种方式是不能实现同一授权的,只能为管理人员提供统一的用户权限视图,但实现方式相对简单。

按我们目前的技术力量,能力水平以及周边系统环境的复杂程度,我想估计下一步只能按类似方法二的方式对该系统进行发展。

不知道各位在这方面有什么宝贵的经验,欢迎一起讨论学习。

另,本人目前带领一支约20人的开发队伍负责本地局的操作型CRM,代理商系统,统一工号,统一112、外线作业管理系统系统,网上营业厅等若干系统的设计,开发、维护和管理,在5年来积累有一点心得,遇到很多难题,希望能在这里和大家讨论学习。
   
时间:2006-01-15
You can try this one:
http://docs.hp.com/en/5991-4432/ch05s06.html
   
0 请登录后投票
时间:2006-01-16
EIP
   
0 请登录后投票
时间:2006-01-16
eyextra 写道
按我们目前的技术力量,能力水平以及周边系统环境的复杂程度,我想估计下一步只能按类似方法二的方式对该系统进行发展。


你需要的不是技术力量、能力水平。 你需要的是资金


国际上在统一授权模型(PMI)方面理论虽然不是很成熟,但是国内也是实现多多,不久前吉大给公安部就实施了一套。

国内的实现怎么样我也不多加评论了,介绍你一个开源的研究研究----permis http://www.permis.org/
   
0 请登录后投票
时间:2006-01-16
我在为某省级银行设计的统一用户认证系统中是这样实现的:统一用户管理系统维护用户在各应用中的角色,而该角色在具体应用中的权限由各应用维护,但是需要将信息同步给统一用户系统,以便统一用户系统的管理员进行角色分配。
这样,管理员就不是只能看到用户权限视图了。应该比方法二要好些。
对老系统的改造也不是很困难。
   
0 请登录后投票
时间:2006-01-16
楼主说得很对:统一认证很简单,统一授权是难点。

我倾向“方案二”,主要在两点:

1。“权限逻辑”与“业务逻辑”实质上是高度相关的,比如说:“数据权限”。一个系统能满足所有系统(可能的)需求?这是不现实的想法,再多的资金也没用。

2。权限无所不在,如果每个操作都要依赖于RPC判断权限,无论如何Cache或者优化,权限系统要面对的负载压力,也是不可想像的。那就是说,这么设计是不合理的。

你可以实现“统一管理权限相关信息,各个系统据此分别实现权限”,就是1.5方案。
   
0 请登录后投票
时间:2006-01-17
jnzgy 写道
我在为某省级银行设计的统一用户认证系统中是这样实现的:统一用户管理系统维护用户在各应用中的角色,而该角色在具体应用中的权限由各应用维护,但是需要将信息同步给统一用户系统,以便统一用户系统的管理员进行角色分配。
这样,管理员就不是只能看到用户权限视图了。应该比方法二要好些。
对老系统的改造也不是很困难。


是的,对于只有操作权限要求的系统来讲,实现角色信息的同步是没有问题,但如果有数据权限要求的系统,这种方式就不合适了,试想例如一个客户管理系统,每一个客户经理与客户间的关系不是单单的一对多,或由整个片区共同负责的多对多的简单对应关系,系统要求可以按照地区,行业,消费等级,服务等级,渠道类型,重点业务类型,其他更个性化更灵活的要求等等来进行切分,那么系统就必须通过为每个用户配置数据访问参数来定用户的权限,这种方式是不适合用角色对应数据权限来建立数据权限角色的,因为全局2000多个客户经理对应300多万客户的数据权限要求各种各样,这会造成角色风暴,因此只能通过数据权限(角色)+数据权限(参数)来对用户所有权限进行配置。不过当然你也可以说可以通过配置XML来将相关参数同步给统一用户管理系统,但问题统一用户系统那就要维护一个与某个系统特性要求相关的权限赋予功能界面,对少数几个系统可以这样做,但对如此复杂的企业系统环境来讲,这始终是不现实的。

---实际上有关系统权限系统的设计,我也是比较感兴趣和大家再深入探讨的,看看大家碰到的难题和解决办法,不过可以不在这里深入研究。
   
0 请登录后投票
时间:2006-01-17
jackyz 写道
楼主说得很对:统一认证很简单,统一授权是难点。

我倾向“方案二”,主要在两点:

1。“权限逻辑”与“业务逻辑”实质上是高度相关的,比如说:“数据权限”。一个系统能满足所有系统(可能的)需求?这是不现实的想法,再多的资金也没用。

2。权限无所不在,如果每个操作都要依赖于RPC判断权限,无论如何Cache或者优化,权限系统要面对的负载压力,也是不可想像的。那就是说,这么设计是不合理的。

你可以实现“统一管理权限相关信息,各个系统据此分别实现权限”,就是1.5方案。


1.5当然也是我们所考虑的,从方案尽量往1靠,不过设计过程中是会充分考虑设计难度、实施成本、各系统的改造成本等各方面因素。
   
0 请登录后投票
时间:2006-01-23
统一授权不是不可做到,而是看你们单位愿意付出多大代价。

比如你可以实现一个统一的资源定义,授权。对于你的授权系统来说,这些资源名,资源含义只是你的一个描述对象。 至于这个资源ID代表的权限由各个应用解析。这样完全可以做到统一授权。以后的新系统你是可以要求必须符合统一授权中心。麻烦的是, 如果你有老系统,老系统的授权方式怎么移值? 而且没有老系统的部门一般来说好像也不大可能?
   
0 请登录后投票
时间:2006-01-23
lixigua 写道
比如你可以实现一个统一的资源定义,授权。对于你的授权系统来说,这些资源名,资源含义只是你的一个描述对象


这实际上和我上面写的方案二思路差不多
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐