关闭

SSO权限控制设计思路

标签: Java应用sso
1168人阅读 评论(0) 收藏 举报
分类:

     SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。

    它主要解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。

     SSO的设计思路:

      1、产生SSO-Client插件

          称之为插件,则需要其尽量的简单,微小,对需要利用的资源无侵入或者说侵入很小。经过三思以后,LZ决定用Java自身的类型和HttpClient完成插件的认证功能。主要思路:

1)将插件配置到需要管理的web站点,主要是通过filter来完成;LoginFilter只要是登录控制,如果需要接入权限,则还需要配置AuthorityFilter。

2)配置用户基本文件。因为插件要求具有广泛性,比如我想接入自己的用户认证服务,我想跳转到自己的登录页面,还有不同的web服务站点可能要配置自己的首页信息等等,所以反复思考以后,还是觉得通过加入配置properties文件(虽然很不友好)。主要的配置内容有:登录首页url,用户在这里输入用户名和咪咪;登录认证的首页url,验证用户的身份信息,以及对产生ticket和ticket教研;需要跳转的服务首页url;统一错误页url。

3)实现的思路:

        (1)用户请求服务的时候,被LoginFilter拦截到,因为没有身份认证,所以会跳转到登录页面;不过,需要将跳回的url作为参数传过去,因为登录身份系统和服务系统是两个独立的系统,只能通过请求来连接;

(2)登录页完成登录认证后,会生成认证的ticket。因为上面的请求有参数url,所以跳转到服务的url,并带上ticket。

(3)虽然有ticket,但是身份还没有,所以带着ticket,再次请求认证系统;这时候,会通过ticket,传回用户的基本信息,如username,role,privilege等。

(4)SSO会把用户的信息放入到session中,这样再次请求服务的时候,因为有用户信息,就不会再进行身份认证了。

(5)因为请求会带着ticket,请求其他服务的时候,会直接对原有的ticket验证,可能生成新的ticket,新的服务再重复上述认证流程,就能免去第二次登陆。

流程图有:


     2、SSO-Sever

       SSO-Sever就是一个权限管理web系统。用户登录以后,会判断用户登录是否成功,权限是否拥有,然后在把用户信息和ticket写入session或者cookie中。同事,SSO-Sever还会对登录用户进行管理。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21341次
    • 积分:668
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:19篇
    • 译文:0篇
    • 评论:1条
    最新评论