CAS登录认证[通俗易懂]

CAS登录认证[通俗易懂]CAS最基本的协议过程:名词解释 TicketGrangtingTicket(TGT): TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key

大家好,又见面了,我是你们的朋友全栈君。

CAS最基本的协议过程:

CAS登录认证[通俗易懂]

名词解释

  • Ticket Grangting Ticket(TGT)
    TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

  • Ticket-granting cookie(TGC)
    存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CASServer用来明确用户身份的凭证。

  • Service ticket(ST) :服务票据,服务的惟一标识码 , 由 CASServer 发出( Http 传送),用户访问Service时,service发现用户没有ST,则要求用户去CAS获取ST.用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户。用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源

组成

  • CAS 服务端
    CASServer 负责完成对用户的认证工作 , 需要独立部署 , CAS Server 会处理用户名 /密码等凭证 (Credentials) 。

  • CAS 客户端
    负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。
    CASClient 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

CAS Web工作流程

CAS登录认证[通俗易懂]

CAS登录流程

步骤 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

java举例:
https://cas-server.domain.com/cas/login?service=http%3A%2F%2Fcas.domain.com%3A8080

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

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

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

java举例:
http://cas.domain.com/8080?ticket=${service-ticket}

步骤 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}

java举例:
https://cas-server.domain.com/cas/serviceValidate?ticket=${service-ticket}&service=http://cas.domain.com/8080

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

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess> 
        <cas:user>AAAA</cas:user>
    </cas:authenticationSuccess> 
</cas:serviceResponse>
  • 其中AAAA是登陆的用户名

否则返回:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> 
    <cas:authenticationFailure code='XXX'> YYY </cas:authenticationFailure> 
</cas:serviceResponse>
  • 其中:
    • XXX的可能取值是INVALID_REQUEST, INVALID_TICKET, INVALID_SERVICE, INTERNAL_ERROR
    • YYY是错误描述信息

至此CAS的登陆流程结束

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

CAS登出流程

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

java举例:
https://cas-server.domain.com/cas/logout?service=http://cas.domain.com:8080

<end>


<strike>
请求方法:POST
请求URL: ${client-service-url} ( http://cas.domain.com/8080)
请求头: Content-Type:application/x-www-form-urlencoded
请求正文:

<!-- lang: xml --> 
logoutRequest=
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="#LR_TICKET_ID#" Version="2.0" IssueInstant="#CURRENT_DATETIME#"> 
    <saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@NOT_USED@</saml:NameID> 
    <samlp:SessionIndex>#ST#</samlp:SessionIndex> 
</samlp:LogoutRequest>
  • 其中
    • LR_TICKET_ID:   CAS服务器为每个登出通知请求所生成的一个值
    • ST         之前登陆成功后CAS服务端传回来的Service Ticket
    • CURRENT_DATETIME 发出该请求时,CAS服务器的日期/时间
      </strike>

作者:llitfk_DockOne
链接:https://www.jianshu.com/p/8daeb20abb84
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150277.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信个人号机器人接口「建议收藏」

    微信个人号机器人接口「建议收藏」前段时间公司需求开发一套自定义的微信机器人,需求是可以自批量添加好友,自动聊天,自动回复,发朋友圈,转发语音,以及定时群发等,还可以提取聊天内容,进行数据汇总,what????微信还可以这样做!!调研开发了3个月,3个月啊!!!(主要被各种技术走偏路),终于成功了,都是走过的心酸泪,分享给大家,大家学习完,记得给我点个赞!!!大家一般需求点无非是以下几个需求:1.开发个人微信营销系统2.开发自定义的微信机器人,3.开发微信智能聊天客服系统4.定制行业内的群数据分析功能需求很

    2022年5月20日
    93
  • HOOK消息钩子

    HOOK消息钩子大致的过程是当系统I/O上发生一个事件时,系统捕获该事件,并向指定的应用程序的消息队列发送一个消息,应用程序从消息队列中顺次取出一个消息,交由系统调度相应的窗口回调程序进行消息处理。这里可以看到,从OS捕捉到消息开始处理,到最后交还给OS调度回调函数,就像走了一个循环,我自己理解这也是为什么叫做“回调函数”的原因之一。接下来我们要进行的HOOK就是在上面的第二步和第三步之间进行的额外工作。钩子机制允许应用程序截获(且或)处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把

    2022年7月26日
    5
  • 二分类变量相关性分析spss_两个有序分类变量相关性的卡方检验-SPSS教程

    二分类变量相关性分析spss_两个有序分类变量相关性的卡方检验-SPSS教程一、问题与数据研究者想探索类风湿关节炎躯体感觉的症状数量与疼痛等级之间的关系,从一家大型医院入院治疗的类风湿关节炎病人中随机招募了364例研究对象。类风湿关节炎躯体感觉共有6种症状,研究者请研究对象报告其患有症状。类风湿关节炎门诊的医生使用疼痛量表对每个研究对象的疼痛进行评级。研究对象自报的类风湿关节炎躯体感觉症状数量在1-6个之间,为有序分类变量,变量名为symptoms。医生将研究对象的疼痛分…

    2022年5月17日
    132
  • latex 公式如何换行

    latex 公式如何换行1、如图所示,我们先写个长公式。2、可以看到,公式没有自动换行,而是跨过了一栏。3、如图所示,在公式上下两端加上split。同时使用\\指明换行的位置。4、如图所示,公式实现了自动换行。5、大家选择换行的位置也很重要。如图所示,选择该处换行6、得到的效果就非常糟糕。承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。…

    2022年5月4日
    319
  • mybatiscodehelperpro2.9.4激活码【2021.8最新】

    (mybatiscodehelperpro2.9.4激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月26日
    112
  • Java三种方式实现发送xml参数的WebService接口调用

    Java三种方式实现发送xml参数的WebService接口调用项目开发中与第三方系统数据对接遇到的问题,仅用作记录。1.使用cxf调用(联调时没有收到响应信息)JaxWsDynamicClientFactoryclientFactory=JaxWsDynamicClientFactory.newInstance();logger.info(JSON.toJSON(todoInfo));Clientclient=clientFacto…

    2022年7月12日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号