zoukankan      html  css  js  c++  java
  • CAS 单点登录

    首先,何谓单点登录。

    单点登录(Single Sign On),简称为 SSO,是眼下比較流行的企业业务整合的解决方式之中的一个。

    SSO的定义是在多个应用系统中,用户仅仅须要登录一次就能够訪问全部相互信任的应用系统。


    cas登录系统中有两个角色,一个是cas server 就是提供登录服务,登录页面,client 校验的一个web应用。
    一个是cas client,使用过滤器。在客户应用呗訪问的时候会先推断该系统是否登录,无登录则直接重定向到cas server服务上。



    在CAS中MVC的控制主要是使用的spring MVC来实现的。可是。在登录过程中,由于有点类似于工作流的性质,所以。採用了一个轻量级的工作流框架。就是spring 的weflow。以下,我们就CAS怎样採用webflow控制登录流程进行分析。

    想深入理解webflow工作原理的读者须要參考官方的webflow2.21版本号的reference。

    ---------------------------------cas client 的流程----------------------------------------

    cas client 使用的是过滤器。

    在每次浏览器訪问cas celient应用之时,会先走在web.xml中配置的casFilter。他们会推断该用户是否已经登录。

    假设(用户已经登陆){

    doFilter;

    }

    假设(用户未登录。而且请求的參数中并没有携带ticket參数){

    那么,将把浏览器重定向与cas server 让其去登录。

    }
    假设(用户未登录,而且请求中携带了ticket參数){
    那么。cas client 会在后台向 cas server 发送 一个server validate的请求。

    去验证这个ticket的合法性。

    假设(验证成功){
    创建session。cookie 并觉得该客户是已经登录状态。
    }
    假设(验证失败){
    吧浏览器重定向于 cas server 让浏览器去登录。
    }
    }
    这就是cas 登录中,client的流程
    而在cas登出中。已登录的全部cas client 会收到来自 cas server的一个loginoutRequest ,客户端会销毁session什么的来进行登出的操作。

    从而完毕登出。


    -------------------------------------cas server的登录流程------------------------------------
    cas server 在接收到 casclient 重定向过来的login请求。会进行一系列的账号password验证工作。

    假设(登录成功){
    写cookie, 将浏览器携带过来的server參数。也就是cas client应用的地址拿到,存入map(为将来的登出做准备)。
    将用户重定向给cas client , 并携带ticket參数。
    }否则{
    毫无疑问。。又一次登录吧。

    }
    ps:登录的操作仅仅会登录一次。
    -------------------------------------cas server的验证流程------------------------------------
    接收到cas client 发送过来的验证请求,并返回过去一段xml格式的结果。代表成功,或者失败。
    ps:该操作每一个cas client 都会走一次。


    -------------------------------------用户登录流程------------------------------------
    至此,全部的流程都大概描写叙述完成。

    那么实际登录流程是如何呢?
    我常常笑说,这样的登录就是踢皮球的过程,用户会被cas server 以及cas client 各种踢来踢去。
    用户(浏览器)訪问 http://client/clientapp
    clientapp 发现用户未登录。所以重定向给了casserver。于是用户的浏览器上的url变成了
    用户(浏览器)訪问http://casserver:8443/casserver?

    server=http://client/clientapp

    用户(浏览器)输入用户password点击提交
    casserver验证结果。并将用户重定向给了server中定义的client并附送了一个ticket
    用户(浏览器)訪问 http://client/clientapp?ticket=xxxxxxx
    casclient检測到实用户未登录,并有ticket參数。

    则在后台向casserver 发送了server validate请求。

    casserver收到cas client 的验证请求。返回成功或者失败
    casclient收到来自casserver的用户返回值。假设(成功){do filter}否则{将用户重定向到casserver 登录页面}

    用户(浏览器)訪问http://client/clientappB
    casclient检測到用户未登录,会重定向到casserver
    casserver有已经登录的cookie參数。casserver会拿到ticket并重定向给casclient
    用户(浏览器)訪问 http://client/clientappB?ticket=xxxxxxx
    casclient检測到实用户未登录,并有ticket參数。则在后台向casserver 发送了server validate请求。
    casserver收到cas client 的验证请求。返回成功或者失败
    casclient收到来自casserver的用户返回值。假设(成功){do filter}否则{将用户重定向到casserver 登录页面}
    可是对用户登录appB这个过程来说,仅仅是用户(浏览器)各种被重定向的过程。也就是说。对于用户来说是透明的。于是就此实现了单点登录过程。


    用户(浏览器)訪问http://client/clientapp
    casclient检測到用户已经登录。放行。


    -------------------------------------用户登出流程------------------------------------
    用户(浏览器) 訪问http://client/clientapp/loginout
    casclient会检測到该请求,并发送一个loginout请求到casserver
    casserver收到该请求。会迭代本文红色字体那行的map。并迭代取出全部的client的url地址。
    casserver迭代请求该这些url地址,并附带一个requestCode。。。

    忘记什么名字了。就是一个參数,表示是登出操作。

    casclient接收到该參数,将session销毁,完毕登出操作
    casclientB接收到该參数,将session销毁。完毕登出操作
    用户(浏览器)被重定向到casserver 到登陆页面
    至此,登出完成。

  • 相关阅读:
    所谓幸福
    kobuki 红外自动回充源码原理分析
    《SLAM机器人基础教程》第三章 单片机与STM32:电机码盘实现里程计实验
    《SLAM机器人基础教程》第三章 单片机与STM32:PWM电机转动实验
    《SLAM机器人基础教程》第三章 单片机与STM32:超声测距实验
    《SLAM机器人基础教程》第三章 单片机与STM32:ADC与电压检测实验
    《SLAM机器人基础教程》第三章 单片机与STM32:碰撞传感器实验
    《SLAM机器人基础教程》第三章 单片机与STM32:定时器实验
    《SLAM机器人基础教程》第三章 单片机与STM32:滴答延时实验使用SysTick实现时间戳
    《SLAM导航机器人基础》第三章:单片机与STM32:串口Printf打印实验
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5131681.html
Copyright © 2011-2022 走看看