美文网首页
cas客户端集成方案

cas客户端集成方案

作者: 哥别打脸 | 来源:发表于2017-01-16 09:55 被阅读1101次

    面向读者

    需要集成单点登录功能的第三方软件供应商

    目的

    • 解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。
    • 提高用户效率,用户不再被多次登录困扰,也不需要记住多个 ID 和密码。另外,用户忘记密码并求助于支持人员的情况也会减少。
    • 简化管理,如果应用程序加入了单点登录协议,管理用户帐号的负担就会减轻。

    参考文档

    https://github.com/apereo/cas

    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html

    https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol-Specification.html

    cas单点登录简介

    CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

    1. 开源的企业级单点登录解决方案。
    1. CAS Server 为需要独立部署的 Web 应用。
    2. CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

    部署架构图#

    CAS单点登录流程图#

    详细协议参考: https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol-Specification.html

    第一次登陆APP1应用

    https://img.haomeiwen.com/i3696220/1c673a739803183f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

    1访问应用app1

    用户访问http://127.0.0.1/app1
    此时APP1通过检测session发现用户并没有登录于是重定向到cas-server。

    注意:第三方集成需要实现此逻辑

    2APP1重定向到cas-server请求登录认证

    重定向地址 http://192.168.1.100/cas/login?service=http://127.0.0.1/app1/cas
    附带一个service参数告诉cas-server认证成功后再次重定向的地址。

    3用户输入用户名密码提交

    4认证成功,返回ticket

    cas-server接受客户的参数认证成功,并生成一个ticket,重定向给app1,重定向地址
    http://127.0.0.1/app1/cas?ticket=XXXXXXX

    5校验ticket

    对于Java应用来说http://127.0.0.1/app1/cas看起来就是个Servlet或者filter,当这个filter接受到第四步的ticket后,立刻拿着这个ticket去cas-server验证用户认证信息。cas2.0协议中,验证这个ticket的地址为
    http://192.168.1.100/cas/serviceValidate,可以使用httpclient或者提供的客户端去调这个接口。

    成功会返回

    <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas">
     <cas:authenticationSuccess>
      <cas:user>username</cas:user>
      <cas:proxyGrantingTicket>PGTIOU-84678-8a9d...</cas:proxyGrantingTicket>
     </cas:authenticationSuccess>
    </cas:serviceResponse>
    

    失败返回

    <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas">
     <cas:authenticationFailure code="INVALID_TICKET">
        Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized
      </cas:authenticationFailure>
    </cas:serviceResponse>
    

    注意:第三方集成需要根据协议流程图实现此filter或者servlet

    6返回app1

    由于APP1单点信任cas-server,在得到第5步的user信息后,将user信息存入app1的session,或者其他方式标识该用户认证成功。
    至此用户登录完成,整个过程app1无法知晓用户的密码,用户名密码由cas-server统一管理。

    成功登陆APP1后登陆app2 流程图(免输用户名密码)##

    https://img.haomeiwen.com/i3696220/97d2be64dbf802d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

    1访问应用app2 http://127.0.0.1/app2

    此时APP2通过检测session发现用户并没有登录于是重定向到cas-server

    2APP1重定向到cas-server请求登录认证

    重定向地址 http://192.168.1.100/cas/login?service=http://127.0.0.1/app1/cas
    附带一个service参数告诉cas-server认证成功后重定向的地址。

    3判断用户已经登录

    cas检测session发现用户已经登录过,于是直接跳转到第四步http://127.0.0.1/app2/cas?ticket=XXXXXXX
    ,而不是跳转到登录地址,这个过程对用户无感知。

    4认证成功返回ticket

    5校验ticket

    于首次登录流程一致。

    6返回app2

    在用户这端访问APP2,直接就跳转到了登录后的页面,达到了免输用户名密码的效果,实际上在cas-server做了两次重定向。

    接口#

    /login,登录##

    参数

    • service(必须),应用的唯一标识符号,例如http://127.0.0.1/app1/cas

    举例

    https://cas.example.org/cas/login?service=http%3A%2F%2Fwww.example.org%2Fservice

    /logout,注销登录

    调用这个接口,整个单点登录会话结束,其他应用单点登录功能失效。

    举例

    https://cas.example.org/cas/loout

    /serviceValidate,验证ticket是否有效

    参数

    • service(必须),应用的唯一标识符号,例如http://127.0.0.1/app1/cas

    • ticket (必须),通过登录获得到的票据

    • format (可选,xml或者json)指定接口返回的格式

    返回

    • 成功

        <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas">
         <cas:authenticationSuccess>
          <cas:user>username</cas:user>
          <cas:proxyGrantingTicket>PGTIOU-84678-8a9d...</cas:proxyGrantingTicket>
         </cas:authenticationSuccess>
        </cas:serviceResponse>
      

    失败

        <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas">
         <cas:authenticationFailure code="INVALID_TICKET">
            Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized
          </cas:authenticationFailure>
        </cas:serviceResponse>
    

    举例

    https://cas.example.org/cas/validate?service=http%3A%2F%2Fwww.example.org%2Fservice&ticket=ST-1856339-aA5Yuvrxzpv8Tau1cYQ7

    相关文章

      网友评论

          本文标题:cas客户端集成方案

          本文链接:https://www.haomeiwen.com/subject/gjgubttx.html