zoukankan      html  css  js  c++  java
  • CAS客户端认证流程

    CAS登陆流程

    cas 登陆流程

    Step 1:浏览器向CAS客户端发起登陆请求,CAS客户端生成“登陆URL”,并把浏览器重定向到该URL 
    登陆URL: https://${cas-server-host}:${cas-server-port}/cas-server/login?service=${client-service-url} 
    其中 
    cas-server-host: cas认证服务器的域名 
    cas-server-port: cas认证服务器的IP 
    client-service-url: 用于登陆成功后,浏览器重定向的URL

    Step 2: 浏览器向“登陆URL”发起重定向请求,CAS服务端创建会话,把TGT(Ticket Granting Ticket)放入cookie,并返回登陆页面

    Step 3:用户输入用户名和密码,然后提交登陆表单. CAS服务端通过登陆验证后,会生成一个ST(service ticket,简称ticket), 然后把浏览器重定向到${client-service-url}?ticket=${service-ticket}

    Step 4:浏览器重定向到${client-service-url}?ticket=${service-ticket}发起重定向请求

    Step 5: CAS客户端取出ticket,生成“ticket验证URL”,然后向"ticket验证URL"发起http GET请求 
    “ticket验证URL”: http://${cas-server-host}:${cas-server-port}/cas-server/serviceValidate?ticket=${service-ticket}&service=${client-service-url}

    Step 6: 如果CAS服务器通过ticket的有效性检查,那么会返回类似如下格式的XML片段

    1 <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    2     <cas:authenticationSuccess>
    3         <cas:user>AAAA</cas:user>
    4     </cas:authenticationSuccess>
    5 </cas:serviceResponse>

    其中AAAA是登陆的用户名 
    否则返回:

    1 <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    2     <cas:authenticationFailure code='XXX'>
    3          YYY
    4     </cas:authenticationFailure>
    5 </cas:serviceResponse>

    其中:

    • XXX的可能取值是INVALID_TICKET, CREATION_ERROR, INVALID_SERVICE
    • YYY是错误描述信息

    至此CAS的登陆流程结束

    登陆成功后,CAS客户端应该在会话中保存登陆状态信息。CAS服务器通常在Step 6会建立ticket和${client-service-url}的映射关系,以便在登出时通知其业务系统清除缓存中的状态信息

    CAS登出流程

    浏览器或CAS客户端向“登出URL”发起GET请求: 
    “登出URL”: https://${cas-server-host}:${cas-server-port}/cas-server/logout 
    CAS服务器销毁TGT和ST,并向所有已登陆的业务系统发出登出通知请求

    请求方法:POST

    请求URL: ${client-service-url}

    请求头: Content-Type:application/x-www-form-urlencoded

    请求正文:

    1 logoutRequest=<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="#LR_TICKET_ID#"
    2 Version="2.0" IssueInstant="#CURRENT_DATETIME#">
    3     <saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@NOT_USED@</saml:NameID>
    4     <samlp:SessionIndex>#ST#</samlp:SessionIndex>
    5 </samlp:LogoutRequest>

    *其中

      • LR_TICKET_ID:  CAS服务器为每个登出通知请求所生成的一个值
      • ST        之前登陆成功后CAS服务端传回来的Service Ticket
      • CURRENT_DATETIME 发出该请求时,CAS服务器的日期/时间
  • 相关阅读:
    【codevs1227】方格取数2(最大流费最大流-模板
    【ZJOI2008】【BZOJ1033】杀蚂蚁(占坑待填
    python基础学习1-流程控制和判断
    python基础学习1-变量定义赋值,屏幕输入输出
    Jzoj5237 最长公共子序列
    Jzoj5236 利普希茨
    [置顶] 欢迎使用CSDN-markdown编辑器
    Jzoj5235 好的排列
    Jzoj5234 外星人的路径
    Jzoj5231 序列问题
  • 原文地址:https://www.cnblogs.com/fuyaozhishang/p/10965728.html
Copyright © 2011-2022 走看看