SSO之CAS

单点登录SSO

​ 单点登录的主要原理就是在每次登录成功以后生成一个唯一不可重复的令牌 token,我们就简单的用了一个随

机的 UUID 来生成 token。当用户登录成功后用生成的 token 做 key, 登录的用户对象信息转成 json 字符串后作

为 value 放到 redis 里边【使用的是 hash 这种数据结构】。然后再把这个 token 回写给浏览器的 cookie 中。这

样,当别的模块再访问后台的时候只需要将 cookie 中的 token 传给服务端,服务端就能根据 token 到 Redis 中获

取用户信息,如果能获取到说明登录过,如果获取不到说明没有登录过,从而实现单点登录的功能。

​ 再来说一下 cookie 保存时的一些细节。 因为我们的系统在部署时,各个模块都是通过 Nginx 映射到同一个

一级域名下的, cookie 只要把他的作用域设置成一级域名,就可以在所有同一个一级域名下的模块中共享。所以

我们以字符串 “sso”为 key 把随机生成的 token 为 value 写入到 cookie 里边,设置有效期 30 分钟;

​ 然后做了一个统一校验 token 的接口;各个模块在自己的拦截器里边,调用此 token 校验接口,验证是否登

录。统一校验 token 的接口的主要流程是,首先从 cookie 里边获取到 token,然后通过 token 到 redis 里边获取

用户信息。这两个过程,任何一个失败,都直接返回 null, 则说明没有登录,拦截到统一的登录页面,并把进入

拦截到的 url 放入 cookie 里边,方便登录成功以后获取这个 url,进行原路径跳转,而不是每次登录都进入首页,

提高用户的体验度。 如果成功,就 cookie 和 token 的值从新设置一遍(这个是为了刷新有效期);这样就实现了多

个模块只需要登录一次就可以的流程。

简单来说:

SSO就像是去迪士尼游玩,只需要在购票处购买一次票,进到里面就可以随便玩。
怎么才能做到只需购买一次票,就可以到处通行呢?这时候就有了CAS,CAS就是SSO的一个解决方案

CAS

​ CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法, CAS 在 2004

年 12 月正式成为 JA-SIG 的一个项目。 CAS 具有以下特点:

【1】 开源的企业级单点登录解决方案。

【2】 CAS Server 为需要独立部署的 Web 应用。

【3】 CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用,包括 Java, .Net, PHP, Perl,

Apache, uPortal, Ruby 等。

​ 从结构上看, CAS 包含两个部分: CAS Server 和 CAS Client。

CAS Server 需要独立部署,主要负责对用户的认证工作,就像是把第一次登录用户的一个标识存到这里,以便此

用户在其他系统登录时验证其需不需要再次登录;

CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server,当用户访问我们的应

用时,首先需要重定向到CAS Server端机型验证,要是原来登录过,就免去登录,重定向到下游系统,否则进行

用户名密码登录操作。

下图是CAS 最基本的协议过程:

SSO 单点登录访问流程主要有以下步骤:

CAS相关术语

  • Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在server端
  • Ticket-granting cookie (TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端
  • Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然 后client拿着这是个票再来找server验证,看看是不是server签发的。就像是我给了你一张我的照片,然后你 拿照片再来问我,这个照片是不是你。。。没错,就是这么无聊

Original: https://www.cnblogs.com/zdh052286/p/12149932.html
Author: 清酒一杯
Title: SSO之CAS

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581605/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • CentOS 7.6 安装 MySQL-5.7.31(RPM方式安装)

    准备工作: 注:5.7.31版本安装步骤及初始化和之前版本有较大区别 CentOS 7.6 系统: 带GUI的服务器 默认安装 MySQL 5.7.31 安装包: 1.RPM安装包…

    Linux 2023年6月8日
    091
  • Python的偏函数(Partial Function Application)

    这个概念说实话以前听过,但没深究过,也没用到过…但是被人问到了,就查来记录一下。 查下资料,发现这个东西说白了就是:部分参数有默认值的函数,Orz。再回过头来看他的英文…

    Linux 2023年6月8日
    0101
  • C++ NFS挂载

    挂载NFS 挂载NFS时,常用的命令比如: #将远程目录挂载到本地/home/share目录下 mount -t nfs -o nolock 192.168.1.10:/tmp /…

    Linux 2023年6月8日
    083
  • 操作系统

    第1章习题1. 设计现代OS的主要目标是什么? OS的作用可表现在哪几个方面? 为什么说操作系统实现了对计算机资源的抽象? 试说明推动多道批处理系统形成和发展的主要动力是什么。 何…

    Linux 2023年6月6日
    096
  • 在使用amoeba连接数据库时,报错java.lang.Exception: poolName=slaves, no valid pools

    搭建3台MySQL服务器,完成主从复制,搭建一台amoeba服务器,完成MySQL的读写分离 问题描述: 问题1、 在服务搭建完毕后,利用客户机连接amoeba服务器登录数据库,无…

    Linux 2023年6月13日
    090
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    097
  • Ubuntu修改静态IP

    转载自:https://www.cnblogs.com/xwgcxk/p/10560181.html 第一步:先获取网卡名称,输入ifconfig,如下图,我们的网卡名称为 ens…

    Linux 2023年6月8日
    083
  • 性能测试

    一.性能测试概述 性能测试概念: 性能测试是指通过特定方式,对被测系统按照一定策略施加压力,获取系响应时间、TPS、资源利用率等性能指标,以期保证生产系统的性能能够满足用户需求的过…

    Linux 2023年6月6日
    094
  • ingress-nginx 部署使用

    安装部署 nginx-ingress-controller 输入下面网址:选择版本 https://github.com/kubernetes/ingress-nginx/blob…

    Linux 2023年6月14日
    0100
  • [SDR] GNU Radio 系列教程(二) —— 绘制第一个信号分析流程图

    1、前言 2、启动 GNU Radio 3、新增块 4、运行 本文视频 参考链接 1、前言 本文将介绍如何在 GNU Radio 中创建和运行第一个流程图。 2、启动 GNU Ra…

    Linux 2023年6月8日
    0112
  • docker compose容器编排

    Docker Compose (可简称Compose)是一个定义与运行复杂应用程序的 Docker 工具,是 Docker 官方 &#x7F16;&#x6392;&…

    Linux 2023年6月8日
    0104
  • linux磁盘配额管理

    磁盘配额是一种磁盘空间的管理机制,使用磁盘配额可限制用户或组在某个特定文件系统中能使用的最大空间 1、查看内核是否支持磁盘配额 grep “CONFIG_QUOTA&#…

    Linux 2023年5月27日
    0104
  • 前端开发:如何正确地跨端

    导读:面对多种多样的跨端诉求,有哪些跨端方案?跨端的本质是什么?作为业务技术开发者,应该怎么做?本文分享阿里巴巴ICBU技术部在跨端开发上的一些思考,介绍了当前主流的跨端方案,以及…

    Linux 2023年6月8日
    080
  • 错误域控降级导致解析问题

    近两天在给分部安装辅助域控的时候,总是安装不成功,或者安装时成功了但是无法复制主域或者其他域控的信息,同步失败,还有就是它一直没有网。 解决方案 经过排查发现域名dns解析不对,经…

    Linux 2023年6月8日
    0123
  • elasticsearch集群部署

    Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮…

    Linux 2023年6月7日
    088
  • 保罗·艾伦的故事

    上周,保罗·艾伦逝世。《财新周刊》约我写一篇纪念文章,发表在他们杂志上面 一些个人新闻:最近,我了解到我在2009年与之抗争的非霍奇金淋巴瘤已经复发。我已经开始治疗,我的医生很乐观…

    Linux 2023年6月14日
    0116
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球