您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    单点登录原理与简单实现(3)
    时间:2017-03-11 09:22 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    用户在sso认证中心登录成功后,sso-server创建授权令牌并存储该令牌,所以,sso-server对令牌的校验就是去查找这个令牌是否存在以及是否过期,令牌校验成功后sso-server将发送校验请求的系统注册到sso认证中心(就是存储起来的意思)

    令牌与注册系统地址通常存储在key-value数据库(如redis)中,redis可以为key设置有效时间也就是令牌的有效期。redis运行在内存中,速度非常快,正好sso-server不需要持久化任何数据。

    令牌与注册系统地址可以用下图描述的结构存储在redis中,可能你会问,为什么要存储这些系统的地址?如果不存储,注销的时候就麻烦了,用户向sso认证中心提交注销请求,sso认证中心注销全局会话,但不知道哪些系统用此全局会话建立了自己的局部会话,也不知道要向哪些子系统发送注销请求注销局部会话

    单点登录原理与简单实现

    7、sso-client校验令牌成功创建局部会话

    令牌校验成功后,sso-client将当前局部会话标记为“已登录”,修改LoginFilter.java,添加几行

    1

    2

    3

     

    if (verifyResult) {

        session.setAttribute("isLogin", true);

    }

     

    sso-client还需将当前会话id与令牌绑定,表示这个会话的登录状态与令牌相关,此关系可以用java的hashmap保存,保存的数据用来处理sso认证中心发来的注销请求

    8、注销过程

    用户向子系统发送带有“logout”参数的请求(注销请求),sso-client拦截器拦截该请求,向sso认证中心发起注销请求

    1

    2

    3

    4

     

    String logout = req.getParameter("logout");

    if (logout != null) {

        this.ssoServer.logout(token);

    }

     

    sso认证中心也用同样的方式识别出sso-client的请求是注销请求(带有“logout”参数),sso认证中心注销全局会话

    1

    2

    3

    4

    5

    6

    7

    8

     

    @RequestMapping("/logout")

    public String logout(HttpServletRequest req) {

        HttpSession session = req.getSession();

        if (session != null) {

            session.invalidate();//触发LogoutListener

        }

        return "redirect:/";

    }

     

    sso认证中心有一个全局会话的监听器,一旦全局会话注销,将通知所有注册系统注销

    1

    2

    3

    4

    5

    6

    7

    8

     

    public class LogoutListener implements HttpSessionListener {

        @Override

        public void sessionCreated(HttpSessionEvent event) {}

        @Override

        public void sessionDestroyed(HttpSessionEvent event) {

            //通过httpClient向所有注册系统发送注销请求

        }

    }

     

     

    【编辑推荐】

    腾讯开放平台中实现QQ登陆的功能

    Python模拟163登陆获取邮件列表

    8月编程语言排行榜:C语言助力火星登陆

    通用社区登陆组件技术分享中篇:OAuth登陆组件流程

    用于新浪微博,腾讯QQ,淘宝 OAUTH2.0 登陆的NET类库封装

    Android 应用登陆 Chrome OS,证据就在这里

    (责任编辑:admin)