zoukankan      html  css  js  c++  java
  • Cas_个人理解

     
     
    分为三个部分
    1、Cas服务器(用于验证用户是否正确)
           1、用户信息存在服务端,其它客户端应用程序修改用户信息后需要同步到服务端
           2、用户信息一般存储在服务端的数据库中,加密及验证算法Cas提供默认方法
    2、Cas客户端(和应用程序合为一体)
    3、客户端(一般是用户使用的web浏览器)
     
    名词解释
    1、ST:Server Ticket(就是Ticket)
        STCAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问serviceserviceSTCAS验证,验证通过后,允许用户访问资源。
     
    2、TGC:Ticket Granted Cookie  (客户端用户持有,传送到服务器,用于验证)
        存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CAS Server用来明确用户身份的凭证。
     
    3、TGT(Ticket Grangting Ticket)
         TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
     
     
    Cas客户端主要的几个Filter
          1、AuthenticationFilter
    a)验证session是否有值(用户数据放在session中)
    b)验证是否有ticket(不验证其正确性)
     
     
    2、TicketValidationFilter
              a)验证ticket是否正确
              b)ticket只是用一次
    3、AssertionThreadLocalFilter
              a) AssertionThreadLocalFilter作用很简单,就是将Assertion绑定到ThreadLocal
              c) 项目中可获取userInfo、roleInfo并存储在session中(从assertion中获取loginName)

     

    4、单点登录(SingleSignOutFilter、SingleSignOutHttpSessionListener)
               a)功能:登录过滤器、监听器
               b) 先执行:SingleSignOutFilter-->doFilter()-->recordSession SingleSignOutHandler-->recordSession  ()
    1、从request中获取token,key值为:"ticket"  
         
    这个Ticket只有在第一次跳转到本应用时才有值,以后取值都为null,以后进入其他页面时
      SingleSignOutFilter.doFilter()不再执行相关业务逻辑,而是直接执行后续的Filter
    2、移除session:this.sessionMappingStorage.removeBySessionById(session.getId());
    3、添加session、mapping、sessionId关系
         ID_TO_SESSION_KEY_MAPPING.put(session.getId(), mappingId);  //这里理解为存储sessionId和ST(mappingId)的对应关系
         MANAGED_SESSIONS.put(mappingId, session);   //这里理解为ST(mappingId)和session的对应关系
    c)再执行SingleSignOutHttpSessionListener-->sessionCreated() 不做任何处理
    d)单点登录添加Session
        1、mappingId参数:从request.getParameter("ticket"),为ST
        2、session参数:从request.getSession(true)获取
        3、HashMapBackedSessionMappingStorage-->addSessionById(String mappingId, HttpSession session)  
             继承于:SessionMappingStorage

              ST示例:ST-23573-vwXU4ej0zAAYfmexmiyL-sso.cycore.cn(mappingId就是ST)

            SessionId示例:kpyo6wtprbr01asqgu9d5cvgm

              4、 进入时间:通过CAS服务器登录后,进入本应用系统的某个页面

     
     

     

    5、单点登出(SingleSignOutFilter、SingleSignOutHttpSessionListener)
               a)功能:登出过滤器、监听器
               b) 先执行:SingleSignOutFilter-->doFilter()-->destroySession  SingleSignOutHandler-->destroySession()
    1、执行HashMapBackedSessionMappingStorage-->removeBySessionById删除session
       MANAGED_SESSIONS.remove(key);
       ID_TO_SESSION_KEY_MAPPING.remove(sessionId);
    2、执行session.invalidate()  【SingleSignOutHandler-->destroySession()】
    c)再执行SingleSignOutHttpSessionListener-->sessionDestroyed()
       内部删除session方法
        MANAGED_SESSIONS.remove(key);
       ID_TO_SESSION_KEY_MAPPING.remove(sessionId);

         d) 根据b、c来看,监听器清除session的业务,在过滤器中已经执行过了,所有不用再次执行

     

     

     



  • 相关阅读:
    MVC ORM 架构
    Kubernetes 第八章 Pod 控制器
    Kubernetes 第七章 Configure Liveness and Readiness Probes
    Kubernetes 第六章 pod 资源对象
    Kubernetes 第五章 YAML
    Kubernetes 核心组件
    Kubernetes 架构原理
    Kubernetes 第四章 kubectl
    Kubernetes 第三章 kubeadm
    yum 配置及yum 源配置
  • 原文地址:https://www.cnblogs.com/gossip/p/5651379.html
Copyright © 2011-2022 走看看