cas单点登录认证的场景演示与分析

概念:

CAS为用户签发登录票据,CAS认证成功后,将TGT对象放入自己的缓存,CAS生成cookie即TGC,自后
登录时如果有TGC的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
TGC (Ticket-granting cookie):存放用户身份认证凭证的cookie,在浏览器和CAS Server用来明确用户身份的凭证。
ST(Service Ticket):CAS服务器通过浏览器分发给客户端服务器的票据。一个特定服务只能有一个唯一的ST

安装CAS服务端

1、通过git下载
git clone -b 5.1 https://github.com/apereo/cas…
2、maven命令打war包
解压后 cd cas-overlay-template 
mvn clean package
3、tomcat部署
从target下找到war放到tomcat的webapps里,启动即可

配置cas服务端
War包web-inf的application.properties文件

1、配置静态密码
原cas.authn.accept.users=casuser::Mellon改为
cas.authn.accept.users=admin::111111
2、增加授权,支持http
增加cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
关于ssl的都屏蔽
修改servicesHTTPSandIMAPS-10000001.json,修改为https|imaps|http


自有应用接入示例

基于springboot应用程序,改造原登录代码,实现cas服务端登录后当前程序不需要登录。
本例没有使用cas官方客户端,即本例仅通过跳转到cas服务端创建登录cookie。然后登录成功后返回当前的应用的固定方法,由其根据返回的TICKET通过get请求去cas服务端确认是否是正常的票据,并取的登录账号,然后根据账号进入系统。
这里业务系统的登录权限控制仍使用自带的。即只有第一次登录涉及到cas,后续所有请求不在与cas有关系。
以下是两个系统,入口地址
系统1:casapp1.com:8081/xit1/loginSsoValidate
系统2:casapp2.com:8082/xt2/loginSsoValidate

第一次在浏览器输入系统1的入口地址
由于此时在浏览器没有ca服务给写入的tgc cookie。会通过代码重定向到casserver进行登录认证。
认证成功后会根据前期提供的service地址,再回调,并给客户端生成tgc cookie。
核心程序如下:

@RequestMapping(value={"/loginSsoValidate"}
  public String loginSso(HttpServletRequest request, HttpServletResponse response, Model model, LoginBean loginBean)
  {
      String ticket= request.getParameter("ticket");
//第一次登录,直接重定向到casserver
      if(ticket==null||"".equals(ticket)){
          return "redirect:"+"http://casserver.com:8080/cas/login?service=http%3a%2f%2fcasapp1.com%3a8081%2fepm%2floginSsoValidate"; 
      }
//登录成功后回调,从server端根据票据获取登录信息。有了登录账号再去进行自己的登录授权控制。
            ResponseEntity<String> resp = template.exchange(
              "http://casserver.com:8080/cas/serviceValidate?service=http://casapp1.com:8081/epm/loginSsoValidate&ticket="+ticket,
                HttpMethod.GET, null, String.class);
        String body = resp.getBody();
        Document document;
        String portalname="";
        try {
            document = DocumentHelper.parseText(body);
            Node userNode=document.selectSingleNode("//cas:user");
            if(userNode!=null){
                //根据节点对象获取登录账号      
                portalname=userNode.getText();
            }else{
                portalname="";                
            }
        } catch (DocumentException e1) {
            e1.printStackTrace();
        }

单点登录进程分析(对应上面程序)

图片为重定向到casserver的效果

1、重定向到casserver登录界面
=============================================================
WHO: audit:unknown
WHAT: [event=success,timestamp=Thu Aug 08 15:25:30 CST 2019,source=RankedAuthenticationProviderWebflowEventResolver]
ACTION: AUTHENTICATION_EVENT_TRIGGERED
APPLICATION: CAS
WHEN: Thu Aug 08 15:25:30 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
2、登录认证
=============================================================
WHO: admin
WHAT: Supplied credentials: [admin]
ACTION: AUTHENTICATION_SUCCESS
APPLICATION: CAS
WHEN: Thu Aug 08 15:27:50 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
3、Tgc-cookie生成
=============================================================
WHO: admin
WHAT: TGT-**********************************************DXpPUQE1bK-lenovo-PC
ACTION: TICKET_GRANTING_TICKET_CREATED
APPLICATION: CAS
WHEN: Thu Aug 08 15:27:50 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
4、st(tiket票据)生成
=============================================================
WHO: admin
WHAT: ST-7-asvaBsIRu1qPlNcPVbAJ-lenovo-PC for http://casapp1.com:8081/epm/loginSsoValidate
ACTION: SERVICE_TICKET_CREATED
APPLICATION: CAS
WHEN: Thu Aug 08 15:27:50 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
=============================================================
4、st(tiket票据)验证
=============================================================
WHO: admin
WHAT: ST-7-asvaBsIRu1qPlNcPVbAJ-lenovo-PC
ACTION: SERVICE_TICKET_VALIDATED
APPLICATION: CAS
WHEN: Thu Aug 08 15:27:50 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1

单点登录到第二个系统的时候
1、重定向cas登录控制,此时发现浏览器已经存在tgc,则不需要登录
=============================================================
WHO: audit:unknown
WHAT: [event=success,timestamp=Thu Aug 08 15:31:48 CST 2019,source=InitialAuthenticationAttemptWebflowEventResolver]
ACTION: AUTHENTICATION_EVENT_TRIGGERED
APPLICATION: CAS
WHEN: Thu Aug 08 15:31:48 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
2、st(tiket票据)生成
=============================================================
WHO: admin
WHAT: ST-8-TT6YJMhAWk22lIUyZHC5-lenovo-PC for http://casapp2.com:8082/cepm/loginSsoValidate
ACTION: SERVICE_TICKET_CREATED
APPLICATION: CAS
WHEN: Thu Aug 08 15:31:48 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
3、st(tiket票据)验证
=============================================================
WHO: admin
WHAT: ST-8-TT6YJMhAWk22lIUyZHC5-lenovo-PC
ACTION: SERVICE_TICKET_VALIDATED
APPLICATION: CAS
WHEN: Thu Aug 08 15:31:49 CST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1

Tgc cookie在浏览器的情况

评论

发表回复

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

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理