CAS-认证流程详解
基础知识
名词解释
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
:俗称大令牌,或者票根,由KDC
和AS
发放,获取该票据后,可直接申请其他服务票据ST
,不需要提供身份认证信息
ST
Service Ticket
:服务票据,由KDC
的TGS
发放,ST
是访问server
内部的令牌
CAS
认证流程
CAS (Central Authentication Service)
中央身份验证服务认证流程如下:
- 访问服务:由于
CAS client
和WEB
应用部署在一起,当用户访问WEB
应用时,CAS client
就会处理请求 - 定向认证:
CAS client
客户端校验HTTP
请求中是否包含ST
和TGT
,如果没有则会重定向到CAS server
地址进行用户认证 - 用户认证:用户通过浏览器填写用户信息,提交给
CAS Server
认证 - 发放票据:
CAS Server
校验过用户信息后,为CAS client
发放ST
,并在浏览器cookie
中设置TGC
,下次访问CAS Server
时会根据TGC
和TGT
验证,判断是否已经登录 - 验证票据:
CAS Client
拿到ST
后,再次请求CAS Server
验证ST
合法性,验证通过后允许客户端访问 - 传输用户信息:
CAS Server
校验过ST
后,传输用户信息给CAS client
代码示例
phpCAS
库: https://github.com/apereo/phpCAS
使用phpCAS
实现对于访问www.baidu.com
的访问控制
<?phprequire_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_url
中service
参数代表受访问控制的资源
2.定向认证
浏览器收到重定向响应后,请求login_url
,等待用户输入用户名密码
3.用户认证
用户输入用户名密码提交表单后,CAS server
对提交信息进行校验。通过校验后,会将浏览器重定向到service
参数后的url
,并且后面携带了一个ticket
令牌,该参数就是ST
。同时在Cookie
中设置CASTGC
,该Cookie
是访问service_url
的cookie
,只有访问该地址才会携带这个cookie
。
向Cookie
中添加CASTGC
的目的是为了下次访问service_url
时,浏览器请求时携带TGC
参数,服务器根据该TGC
查找对应的TGT
,从而判断用户是否登录过了,是否需要展示登录页面。TGT
与TGC
的关系就像SESSION
与Cookie
中SESSIONID
的关系。
4.发放票据
CAS server
会生成ST
服务票据,然后将浏览器重定向到$service_url?ticket=$service-ticket
5.验证票据
CAS
客户端取出ticket,生成$service_validate_url
,然后向$service_validate_url
发送请求从而验证ST
。验证ticket
的URL
形如:
http://${cas_server_host}:${cas_server_port}/cas/serviceValidate?ticket=${service-ticket}&service=http://www.baidu.com
当CAS server
校验通过后,会再次重定向回service_url
,展示相关资源到浏览器中
第二次登陆流程
1.访问服务
访问本地WEB
服务,跳转到login_url
2.签发票据
2.由于之前访问过一次,所以此次login_url
中带了之前获取出的CASTGC
,认证中心在收到请求后,发现TGC
对应一个TGT
,于是用TGT
签发一个ST
,并且返回给浏览器
3.验证票据
浏览器向cas server
发出的地址进行重定向,并校验ST
,校验成功后就可访问受控制的资源了
总结
简单点来说整体的流程就是,客户端请求服务端的login_url
,如果携带了TGC
,服务端返回ST
,客户端再次校验ST
即可;若未携带TGC
,则跳转到login_url
输入用户信息,校验成功后,服务端将TGC
设置到Cookie
中返回,并颁发ST
,客户端再次校验ST
即可。
CAS-认证流程详解相关推荐
- 人机交互软件又添新成员,CarLink认证流程详解
随着现在的科技发展,我们身边的人机互联软件也越来越多,像现在我们熟知的软件有苹果CarPlay.百度Carlife.谷歌Android Auto.华为HiCar,近期,相信有很多小伙伴发现了一个新出的 ...
- 关于蓝牙手环日本TELEC认证流程详解
日本<无线电法>要求,对指定的无线电设备进行型号核准(即技术法规符合性认证).telec认证是强制性的,认证机构为mic在指定无线电设备范围认可的注册认 证机构TELEC(telecom ...
- 无线充电 Qi认证流程详解
1.Qi认证介绍 Qi是全球 无线充电联盟(Wireless Power Consortium,简称WPC)推出的无线充电标准,具备便捷性和通用性两大特征.Qi是一个通用标准,使用Qi技术的产品必须经 ...
- Kerberos认证流程详解
Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...
- SpringBoot 基于 OAuth2 统一身份认证流程详解
1. 目标 了解OAUTH2统一认证基本概念 了解OAUTH2协议流程 了解OAUTH2各种模式类型 了解Spring Security OAuth设计 2. 分析 传统登陆认证介绍 单点登陆认证介绍 ...
- 欧盟无线设备指令RED2014/53/EU:认证流程详解
无线电设备指令RED2014/53/EU于2014年5月22日正式在欧盟官方公报(OJ)上公布,并于2014年6月12日生效,该指令将取代无线电与电信终端设备指令(R&TTE指令),2016年 ...
- wifidog+authpuppy认证流程详解
wifidog+authpuppy认证过程主要是上线和保活下线两个过程. 一 上线 认证过程可以分为十步 : 1 客户端发送初始请求,如http://www.baidu.com 2 网关防火墙把请求重 ...
- keycloak界面配置及认证流程详解
界面上的字段和一些术语不懂的话可以自己百度.由于https需要证书不方便postman展示,所以使用http keycloak设置master登录用户 keycloak 管理界面 keycloak 获 ...
- 数据库oracle认证方式,oracle数据库启动流程及登录认证方式详解
转自:https://www.2cto.com/database/201803/726644.html ■ oracle启动流程-windows下 1) lsnrctl start (启动监听) ...
- 域名注册、域名实名认证、域名解析流程详解
1.域名注册流程详解 首先登陆阿里云网站 www.aliyun.com 点击产品,选择域名注册(左下角蓝色字体) 然后来到此页面 在输入框中填入你想要注册的域名产看是否已经被注册 如:shiyansh ...
最新文章
- android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果
- python中文什么意思-python是什么
- Android通过for循环批量发送短信
- SemEval-2022组队参赛啦!八节课带你入门全球最大的语义测评大赛
- python2与python3同时安装_Win10下python3和python2同时安装并解决pip共存问题
- Python(21)_input用户交互
- 【项目合作】低清老视频转高清,视频超分辨
- java---数组常用的方法:
- win7计算机相机,笔记本win7怎么拍照_win7电脑照相机如何打开
- 数据挖掘——关联分析Apriori算法
- SAP-MM 常见移动类型
- python查询12306余票_「python」12306余票查询GUI
- 从0到1的电商架构应该怎么做?
- 提取保存Win10锁屏壁纸
- java使用环信信息推送,环信推送详解
- bigworld源码分析(3)——dbMgr分析
- 2020微信对话截图一件生成神器
- 【深度学习NLP论文笔记】《Deep Text Classification Can be Fooled》
- C/C#实现RSA签名
- | 应用打包还是测试团队老大难问题?
热门文章
- 全球及中国新能源汽车动力电池行业需求前景展望及投资方向建议报告2022-2028年
- Multisim14.0 电路仿真 并显示各节点各支路的电压电流
- 计算机考研951,清华大学2020,考研专业课951最高分经验分享
- 理解linux cpu load
- ’Hive快速入门课程视频【菜鸟窝出品】
- 分享溜客2011年5月16日被检测过程
- SpringBoot集成Swagger2,以及Swagger2常用API
- PAT——1121 Damn Single 甲级
- SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
- oracle itl 故障,ORACLE ITL事务槽