单点登录:cas单点登录实现原理浅析

news2024/9/19 23:49:52

cas单点登录实现原理浅析

一晃几个月没写博客了,今年多灾多难的一年。
安能摧眉折腰事权贵,使我不得开心颜!
财富是对认知的补偿,不是对勤奋的嘉奖。勤奋只能解决温饱,要挣到钱就得预知风口,或者有独到见解。
九十年代随便开个厂,随便造锅碗瓢盆就能挣到钱,这是人们生活变好对物质的逐渐增加。零几年的时候开个网吧,没日没夜挣钱,互联网兴起,人们开始追求精神需求。08年之前的房地产是朝阳产业,但凡贷款买几套房,后面卖出都能躺平下半生,这是城市化的风口。一几年的移动互联繁荣,催生了程序员等行业的快速发展,阿里京东等崭露头角,小米应运而生,这是科技的风口。现阶段看是流量为王,直播,短视频比较火。

一、基本流程介绍

CAS 包含两个部分: CAS Server 和 CAS Client
CAS-Server 需要独立部署,主要负责对用户的认证工作;
CAS-Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server

在这里插入图片描述

SSO单点登录访问流程步骤:

  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

  2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。

  3. 用户认证:用户身份认证。

  4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

二、常用概念

TGT:Ticket Granted Ticket(俗称大令牌,或者说票根,他可以签发ST)
TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根据他可以找到TGT。
ST:Service Ticket (小令牌),是TGT生成的,默认是用一次就生效了。也就ticket值

以我做过的一个经验为例:
TGC 是一个随机字符串,Ids.uuid()。
TGT是包含用户信息的对象。 登录成功后,会保存redis,key就是TGC,value就是用户信息对象(可简称userInfo)
STticket是一个随机字符串,登录成功后会存redis,key是ticket,value是包含TGC的对象

同时,把TGC存在浏览器中
WebUtil.setCookie(response, “TGC”, tgc, -1)
WebUtil.setCookie 是我们自己的往浏览器存cookie的方法
也可大致理解为:
{TGC:TGT} {ticket:TGC}

三、流程图

在这里插入图片描述

详解流程:

    1. 用户访问办公系统

用户访问http://oa.sinux.com,经过过滤器(默认OA系统已经引入了cas-client的客户端)cas-client-sdk.jar。
该sdk的核心是实现了Filter接口的拦截器
主要作用:判断是否登录,如果没有登录则重定向到认证中心

    1. 重定向到cas认证中心

cas拦截器发现既没有ticket也没有登录态,那就直接重定向到cas服务端。
返回的url是:http://cas.sinux.com?service=http%3A%2F%2Foa.sinux.com%2F
后端使用重定向,浏览器获取到的Status Code 是302
注:这里的serice后的地址会经过编码过,URLEncoder.encode

    1. 请求到cas服务端

服务端会去获取cookie是否有TGC,如果没有,会弹出登录页。如果有会校验TGC,正确的话直接颁发ticket

    1. cas返回登录页面

cas服务端会重定向到自己的登录页面(即 idaas的登录页)
请求地址:http://cas.sinux.com?service=http%3A%2F%2Foa.sinux.com%2F

    1. 输入账密登录
      用户输入账号密码
    1. 校验账密(核心)

6.1 输入账密后会访问cas服务端的认证接口,例如/cas/login http://cas.sinux.com/cas/login?service=http%3A%2F%2Foa.sinux.com%2F 参数就是输入的账号密码

6.2 校验账密 - 校验逻辑不赘述

6.3 从cookie再去取一次TGC,再看看缓存是否存有以TGC为key的TGT的值,不存在则生成一个随机字符串作TGC,TGT则则包含了用户信息的对象,并缓存到redis

6.4 把TGC的值缓存到cookie,key就是TGC,value就是刚生成的随机字符串tgc
WebUtil.setCookie(response,“TGC”, tgc, -1);

6.5 生成一个随机字符串作为ticket,并把ticket作为key,包含TGC的对象作为value缓存到redis

6.6 重定向service地址,并带上ticket 例如:http://oa.sinux.com?ticket=uaxdtejakj

    1. 浏览器发起重定向

浏览器收到302重定向到http://oa.sinux.com

    1. cas-client发起校验ticket

过滤器中会取到ticket的值,然后通过http方式调用http://cas.sinux.com验证该ticket是否是有效的

    1. cas服务端校验并返回

服务端根据ticket获取包含TGC的对象值,并删除ticket(一次有效),返回用户信息

    1. oa系统存储用户信息并返回资源

oa系统接收到cas服务端返回的用户信息,把用户信息存在session或redis,可以就是uuid,value就是用户信息。并往cookie存一个标识,用来保存uuid,例如:
CookieUtils.addCookie(response, “pa-ilf”, uuid, null, -1, false,false);
并通过拦截器的拦截,直接进入接口内容

    1. 用户再次访问OA系统

用户再次访问OA,因为cookie里有pa-if表示,可以拿到uuid,在拦截器里面可以拿到缓存的用户信息,直接通过拦截器进入接口

    1. 返回接口资源

返回接口信息

    1. 用户访问邮件系统

http://mail.sinux.com

    1. 邮箱系统发现第一次访问,拦截器拦截

邮箱系统(这里默认也对接了cas系统,即引入了cas-client包),发现无用户态无ticket,直接跳转到cas服务端地址(重定向)
http://cas.sinux.com?service=http%3A%2F%2Fmail.sinux.com%2F

    1. cas服务系统返回ticket

因为上面6.4已经在cookie缓存了一个TGC:uuid的结构,这里或直接拿到TGC的值即uuid,并取到用户信息。用户重新生成一个ticket,ticket与包含tgc的对象绑定 ,并把ticket拼接到url后面返回

    1. 返回浏览器

带ticket,并重定向 http://mail.sinux.com?ticket=dfgrtgaerwe

    1. 重定向回邮箱系统

浏览器收到302 http://mail.sinux.com?ticket=dfgrtgaerwe
拦截器发现没有登录态,回继续拦截

    1. 校验ticket(类似第8步)

cas-client发起http请求校验ticket的正确性

    1. 返回用户信息(类似第9步)

服务端根据ticket获取包含TGC的对象值,并删除ticket(一次有效),返回用户信息

    1. 缓存用户信息,并返回(类似第10步)

邮件系统接收到cas服务端返回的用户信息,把用户信息存在session或redis,可以就是uuid,value就是用户信息。并往cookie存一个标识,用来保存uuid,例如:
CookieUtils.addCookie(response, “pa-ilf”, uuid, null, -1, false,false);
并通过拦截器的拦截,直接进入接口内容

    1. 用户再次访问邮件系统

cas-client端会从cookie获取到pa-if对应的uuid,再根据uuid从缓存获取到用户信息, 那么久无需登录,直接进入接口

    1. 返回

返回接口资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探寻 IP 代理地址繁多之因

在当今的网络天地里,IP 代理服务随处可见,且令人称奇的是,它们常常手握海量的 IP 地址可供挑选。那么,究竟是什么原因使得 IP 代理拥有如此众多的地址呢?现在,就让我们一同深入探究这个神秘现象背后的缘由。…

Camunda调用子流程案例

调用子流程 调用子流程是指子流程在主流程的外面。子流程一般是多个流程可重用的流程,也可以独立调用子流程。 可以对比编程中的方法抽取。子流程运行时,主流程也是等待状态。子流程结束,主流程继续。 BPMN设计 主流程 全局配置 上传视频 处…

并查集基础与简单扩展应用

并查集 基础题目路径压缩 扩展应用扩展题目1扩展题目2 并查集的结构是一棵树 并查集有两种功能,一种是判断两个元素是否在同一集合,第二种是合并两个集合 并查集的实现需要记录每个节点的父亲节点 判断两个元素是否在同一集合,即判断两个元…

ARM编程模型、指令集、ARM汇编语言程序设计

一、编程模型 1.1数据和指令类型 在之后的演示当中,我们大多数将采用ARM指令集 1.2处理器工作模式 1.3ARM寄存器 1.3.1分类 (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器…

实习项目|苍穹外卖|day7

缓存菜品 1.根据原型进行需求分析与设计&#xff08;接口文档&#xff09; 2.根据接口设计DTO&#xff08;redis数据类型选取&#xff09; 3.编码controller-》service-》mapper GetMapping("/list")ApiOperation("根据分类id查询菜品")public Result<…

51单片机-第十三节-直流电机驱动(PWM)

一、直流电机介绍&#xff1a; 直流电机是一种将电能转换为机械能的装置。 一般的直流电机有两个电极&#xff0c;电极正接&#xff0c;电机正转&#xff0c;电极反接&#xff0c;电机反转。 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&#…

GB35114 USC安防平台 中星微国密摄像机配置 流程

中星微国密摄像机配置介绍 如下以中星微VS-IPC8021S-Y-T4摄像机为例&#xff0c;需要先各自获取p10文件&#xff0c;并通过证书签发机构或者测试SM2证书签发获取证书。 网络配置如下: 摄像机的IP地址为192.168.1.108&#xff0c;国标ID为34020000001320000015 系统的IP地址…

Robotframework框架基础

1.Robot Framework是开源的自动化测试框架&#xff0c;基于关键字驱动的测试方法2.它提供用于创建和执行自动化测试的工具和库&#xff0c;并支持使用不同的测试库和插件进行扩展 一.以下是Robot Framework框架的基础知识 1. 安装&#xff1a;通过pip安装Robot Framework和相…

打造可视化数字大屏供应链管理平台详解:从食堂采购系统源码开始

这篇文章将深入探讨直播美颜SDK与主播美颜工具的技术原理及其发展趋势&#xff0c;帮助开发者了解如何通过技术手段实现流畅、高效的实时美颜效果。 一、什么是直播美颜SDK&#xff1f; 直播美颜SDK是一种为开发者提供实时美颜功能的集成开发工具包。它通过对摄像头捕捉到的画…

现代计算机中数字的表示与浮点数、定点数

现代计算机中数字的表示与浮点数、定点数 导读&#xff1a;浮点数运算是一个非常有技术含量的话题&#xff0c;不太容易掌握。许多程序员都不清楚使用操作符比较float/double类型的话到底出现什么问题。这篇文章讲述了浮点数的来龙去脉&#xff0c;所有的软件开发人员都应该读…

轻松搞定用户认证:微搭低代码平台打造完美登录体验01用户登录

目录 1 创建数据源2 搭建后端API3 用户登录4 最终的代码总结 欢迎阅读我们的微搭低代码全栈开发课程&#xff0c;这是我们的第二篇。在第一篇中我们整体描述了小程序的功能结构&#xff0c;这一篇我们就进入实际的开发。 在开发小程序的时候&#xff0c;第一个需要考虑的就是用…

数据结构基础讲解(一)——线性表之顺序表专项练习

本文数据结构讲解参考书目&#xff1a; 通过网盘分享的文件&#xff1a;数据结构 C语言版.pdf 链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwdze8e 提取码: ze8e 目录 前言 一.线性表的定义 二.线性表的基本操作 三.线性表的顺序存储和表示 四.顺序表中基本操作…

如何设置好看的电脑屏保?电脑屏保设置教程

如何设置好看的电脑屏保&#xff1f;电脑屏保设置教程。大家好&#xff0c;今天小编给大家带来了好看的电脑屏保&#xff0c;教大家如何设置一个好看的电脑屏保。屏保软件很多&#xff0c;今天我们介绍一款比较有特殊的屁屏保软件&#xff1a;芝麻时钟&#xff08;芝麻时钟 桌面…

【C++二分查找】1760. 袋子里最少数目的球

本文涉及的基础知识点 C二分查找 LeetCode1760. 袋子里最少数目的球 给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次&#xff1a; 选择任意一个袋子&#xff0c;并…

AMEsim和Simulink联合仿真生成新的.mexw64液压模型文件

AMEsim和Simulink进行联合仿真非常重要的就是AMEsim经过第四阶段Simulation会在相同文件下面生成一个与AMEsim液压模型相同名字的.mexw64文件&#xff0c;在Simulink进行联合仿真的S-Function需要找的也就是这个文件&#xff0c;只不过输入的时候除了液压模型名字之外&#xff…

形态学运算合集

圆形结构元素 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展&#xff0c;不仅预训练所用的算力和数据正在疯狂内卷&#xff0c;后训练&#xff08;post-training&#xff09;的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法&#xff0c;其中的数据管理风…

Git撤销add

git要提交版本第一步是add&#xff0c;就算是文件本身已经存在只是修改&#xff0c;也需要添加&#xff0c;即添加到暂存区。其中最偷懒和也保险的命令是&#xff1a; git add . 即添加了本地&#xff08;多称工作目录&#xff09;所有文件。 撤销add有以下文章&#xff1a; …

解决SRS流媒体服务服务器无法接收客户端ipv6 RTMP推流的思路

这篇短文我不介绍SRS是什么&#xff0c;主要介绍一个场景问题&#xff0c;场景是你使用服务器并且部署了SRS服务配置成一个媒体流转发服务&#xff0c;也就是客户端往SRS流媒体服务器推流&#xff0c;然后SRS把流转推出去&#xff0c;但是会涉及到一个问题是&#xff1a;用户客…

人工智能时代开启ai代写模式,让创作变得更加简单!

随着人工智能技术的飞速发展&#xff0c;我们的生活和工作方式正在发生翻天覆地的变化。在这个信息爆炸的时代&#xff0c;内容创作领域也迎来了新的变革——ai代写。这一模式的出现&#xff0c;让文章写作变得更加简单高效&#xff0c;为创作者们打开了新的可能。 一、ai代写的…