欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CAS-认证流程详解

程序员文章站 2022-03-04 19:13:34
...

基础知识

名词解释

AS

Authentication Service:认证服务,发放TGT

KDC

Key Distribution Center:**发放中心

TGS

Ticket-Granting Service:票据授权服务,索取TGT,发放ST

TGC

ticket-granting cookie:授权的票据证明,由CAS Server通过SSL方式发送给终端用户。该值存在Cookie中,根据TGC可以找到TGT

TGT

Ticket Granting tieckt:俗称大令牌,或者票根,由KDCAS发放,获取该票据后,可直接申请其他服务票据ST,不需要提供身份认证信息

ST

Service Ticket:服务票据,由KDCTGS发放,ST是访问server内部的令牌


CAS认证流程

CAS (Central Authentication Service)*身份验证服务认证流程如下:

CAS-认证流程详解

  1. 访问服务:由于CAS clientWEB应用部署在一起,当用户访问WEB应用时,CAS client就会处理请求
  2. 定向认证:CAS client客户端校验HTTP请求中是否包含STTGT,如果没有则会重定向到CAS server地址进行用户认证
  3. 用户认证:用户通过浏览器填写用户信息,提交给CAS Server认证
  4. 发放票据:CAS Server校验过用户信息后,为CAS client发放ST,并在浏览器cookie中设置TGC,下次访问CAS Server时会根据TGCTGT验证,判断是否已经登录
  5. 验证票据:CAS Client拿到ST后,再次请求CAS Server验证ST合法性,验证通过后允许客户端访问
  6. 传输用户信息:CAS Server校验过ST后,传输用户信息给CAS client

代码示例

phpCAS库: https://github.com/apereo/phpCAS

使用phpCAS实现对于访问www.baidu.com的访问控制

<?php

require_once  './vendor/apereo/phpcas/CAS.php';

$home = 'http://www.baidu.com/';
$login_url = 'http://10.91.156.174:8080/cas/login?service='.urlencode($home);
$logout_url = 'http://10.91.156.174:8080/cas/logout';
$service_validate_url = 'http://10.91.156.174:8080/cas/serviceValidate';

phpCAS::setDebug();
//设置client属性
phpCAS::client(CAS_VERSION_2_0, "10.91.156.174", 8080, "/cas");

// 设置 Login url
phpCAS::setServerLoginURL($login_url);
// 设置 logout url
phpCAS::setServerLogoutURL($logout_url);
// 设置 validate url
phpCAS::setServerServiceValidateURL($service_validate_url);

// cas server 设置不校验 ssl 证书
phpCAS::setNoCasServerValidation();

// 这个方法确保用户是否验证过,如果没有验证则跳转到验证界面。
phpCAS::forceAuthentication();

通过php -S localhost:8080启动服务


首次登陆流程

受访问控制的资源地址为:http://www.baidu.com/

1.访问服务

通过访问localhost:8080访问本地WEB服务,发现没有用户登录信息,便会生成login url,并重定向到该地址。其中login_urlservice参数代表受访问控制的资源

CAS-认证流程详解


2.定向认证

浏览器收到重定向响应后,请求login_url,等待用户输入用户名密码

CAS-认证流程详解


3.用户认证

用户输入用户名密码提交表单后,CAS server对提交信息进行校验。通过校验后,会将浏览器重定向到service参数后的url,并且后面携带了一个ticket令牌,该参数就是ST。同时在Cookie中设置CASTGC,该Cookie是访问service_urlcookie,只有访问该地址才会携带这个cookie

Cookie中添加CASTGC的目的是为了下次访问service_url时,浏览器请求时携带TGC参数,服务器根据该TGC查找对应的TGT,从而判断用户是否登录过了,是否需要展示登录页面。TGTTGC的关系就像SESSIONCookieSESSIONID的关系。

CAS-认证流程详解


4.发放票据

CAS server会生成ST服务票据,然后将浏览器重定向到$service_url?ticket=$service-ticket

CAS-认证流程详解


5.验证票据

CAS客户端取出ticket,生成$service_validate_url,然后向$service_validate_url发送请求从而验证ST。验证ticketURL形如:

http://${cas_server_host}:${cas_server_port}/cas/serviceValidate?ticket=${service-ticket}&service=http://www.baidu.com

CAS server校验通过后,会再次重定向回service_url,展示相关资源到浏览器中

CAS-认证流程详解


第二次登陆流程

1.访问服务

访问本地WEB服务,跳转到login_url

CAS-认证流程详解


2.签发票据

2.由于之前访问过一次,所以此次login_url中带了之前获取出的CASTGC,认证中心在收到请求后,发现TGC对应一个TGT,于是用TGT签发一个ST,并且返回给浏览器

CAS-认证流程详解


3.验证票据

浏览器向cas server发出的地址进行重定向,并校验ST,校验成功后就可访问受控制的资源了

CAS-认证流程详解

总结

简单点来说整体的流程就是,客户端请求服务端的login_url,如果携带了TGC,服务端返回ST,客户端再次校验ST即可;若未携带TGC,则跳转到login_url输入用户信息,校验成功后,服务端将TGC设置到Cookie中返回,并颁发ST,客户端再次校验ST即可。

相关标签: CAS