单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现+单点登录方案,请见「前端常见登录实现方案 + 单点登录方案

前沿

单点登录(SSO),英文全称为 Single Sign On。 SSO 是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。

一般同域的SSO,用共享session就可以实现了,常见于各微服务都是自己开发的情况。更普遍的场景是跨域集成的SSO,这时候一般采用标准的CAS方案。

IDP SSO 服务用于解决同一公司不同业务应用之间的身份认证问题,只需要登录一次,即可访问所有添加的应用。此服务可以涵盖用户在公有云和私有云中的双重需求。

几个名词

  • TGT: (Ticket Granting Ticket)这是CAS Server里保存的,用于认证用户已经在CAS登录过

  • TGC: (Ticket Granting Cookie)跟上面的TGT对应,是已经认证过的用户在浏览器里保存的cookie

  • ST: (Service Ticket)这是CAS Server发给应用服务器的凭证,应用服务器再用ST到CAS Server认证

  • Authentication: 【认证】即确认该用户的身份是他所声明的那个人

  • Authorization:【授权】即根据用户身份授予他访问特定资源的权限


CAS认证

Central Authentication Service简称CAS,是一种常见的B/S架构的SSO协议。和其他任何SSO协议一样,用户仅需登陆一次,访问其他应用则无需再次登陆。
CAS是一种仅用于Authentication【认证】的服务,它和OAuth/OIDC协议不一样,并不能作为一种Authorization【授权】的协议。
当前CAS协议包括CAS 1.0、CAS2.0、CAS3.0版本,这三个版本的认证流程基本类似。

👇 下面一个标准的CAS认证流程图:

在这里插入图片描述

大致流程:
当用户请求应用服务器提供的某个服务abc,如果没有登录过,那么会返回一个302,跳转到 cas/login?service=abc,在CAS登录后,又会302到abc?ticket=STxxxxx(这里abc就是前面service填的地址),应用服务器用这个ticket到CAS Server认证,如果OK的话,再一次302到abc,完成整个认证过程


IDP 全流程(前后端分离的场景)

现在web应用一般采用前后端分离的架构,通过ajax请求后端服务,这样会无法跳转回原来的静态页面,需要对原有的CAS流程的稍加改造,下面是一个基于CAS实现的IDP系统的完整流程。

👇 应用A 通过 IDP登录

在这里插入图片描述

👆 阐述 IDP 发起的单点登录流程:

  1. 用户访问应用A页面,如:http://a.com/item
  2. 应用A向A后端请求接口,如:http://a.com/api/item
  3. A后端检测登录状态,若该用户已登录直接跳至步骤(15. 正常访问),未登录则返回状态码403&跳转链接,如:http://idp.com
  4. 应用A携带 target_url 重定向到 IDP 登录页面,如:http://idp.com?callback=a.com/item
  5. 用户在IDP中输入 IDP 的登录手机号并请求验证码
  6. IDP前端向IDP后端服务请求验证码接口,如:http://idp.com/api/code
  7. IDP后端别用户手机发送验证码
  8. 用户填写验证码,并登录
  9. IDP前端向IDP后端服务请求登录接口,如:http://idp.com/api/session
  10. IDP后端认证通过后,会生成 TGC&ST,返回给IDP前端
  11. IDP前端 302 跳转到应用A页面到 SSO URL 地址 redirect_uri并携带ST,如:http://a.com/item?st=xxx
  12. 应用A页面通过url中的st向应用A后端去认证登录
  13. 应用A后端再去IDP后端认证登录状态,如:http://idp.com/profile?st
  14. IDP后端认证通过后,向应用A后端返回用户的信息
  15. 应用A后端拿到用户信息生成 Token并返回给应用A前端保存
  16. 最终,用户查看到之前访问的应用A前端,如:http://a.com/item

👇 IDP登录成功,应用B 通过 IDP直接登录

在这里插入图片描述

👆 阐述IDP登录成功,应用B 通过 IDP直接单点登录流程:
【大致步骤同应用A 通过 IDP登录,只是少了IDP登录认证的几步】

  1. 用户访问应用B页面,如:http://b.com/item
  2. 应用B向B后端请求接口,如:http://b.com/api/item
  3. B后端检测登录状态,若该用户已登录直接正常访问,未登录则返回状态码403&跳转链接,如:http://idp.com
  4. 应用B携带 target_url 重定向到 IDP 登录页面,如:http://idp.com?callback=b.com/item
  5. IDP前端通过session获取TGC向IDP后端服务换取ST,IDP后端认证通过后向IDP前端返回ST
  6. IDP前端 302 跳转到应用B页面到 SSO URL 地址 redirect_uri并携带ST,如:http://b.com/item?st=xxx
  7. 应用B页面通过url中的st向应用B后端去认证登录
  8. 应用B后端再去IDP后端认证登录状态,如:http://idp.com/profile?st
  9. IDP后端认证通过后,向应用B后端返回用户的信息
  10. 应用B后端拿到用户信息生成 Token并返回给应用B前端保存
  11. 最终,用户查看到之前访问的应用B前端,如:http://b.com/item

👇 应用退出登录,IDP退出,所有平台都退出登录

在这里插入图片描述

👆 阐述应用退出登录,IDP单点退出登录流程:

  1. 用户访问应用A页面,点击退出登录,如:http://a.com/logout
  2. 应用A向A后端请求退出登录接口,如:http://a.com/api/logout
  3. A后端向IDP后端发送退出登录请求,注销全部TGC&ST
  4. IDP后端向所有应用后端告知退出事件,如:http://a.com/callback、http://b.com/callback

小结

注意:我们需要对redirect_uri做部分定制并encoding

至此,基于CAS实现的前后端分离的SSO系统开发完毕。如果对流程有问题,欢迎大家讨论

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macbookpro可以玩什么游戏

最近几年苹果在游戏领域的动作越来越频繁,在当地时间6月6日举行的的WWDC 2023上还请来了小岛秀夫和他的《死亡搁浅导演剪辑版》到现场为苹果电脑站台。事实上,在不久的将来,我们还真有机会看到越来越多Windows上的大作运行在搭载苹果M系列芯片…

旅游项目day14

其他模块数据初始化 搜索实现 请求一样,但是参数不一样,根据type划分。 后台需要提供一个搜索接口。 请求分发器: 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥

小程序使用echarts图表-雷达图

本文介绍下小程序中如何使用echarts 如果是通过npm安装,这样是全部安装的,体积有点大 我这边是使用echarts中的一个组件来实现的,下边是具体流程,实际效果是没有外边的红色边框的,加红色边框的效果是这篇说明 1.echa…

什么是网络?

你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线连接起来怎么就能&…

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…

html5实现好看的年会邀请函源码模板

文章目录 1.设计来源1.1 邀请函主界面1.2 诚挚邀请界面1.3 关于我们界面1.4 董事长致词界面1.5 公司合作方界面1.6 活动流程界面1.7 加盟支持界面1.8 加盟流程界面1.9 加盟申请界面1.10 活动信息界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者:xcLei…

《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(1)

前言中曾提到:本章详细阐述了PCI总线的数据传送方式,与Cache相关的内容和预读机制是本章的重点。 PCI Agent设备之间、以及HOST处理器和PCI Agent设备之间可以使用存储器读写和I/O读写等总线事务进行数据传送。在大多数情况下,PCI桥不直接与P…

uniapp组件库Modal 模态框 的使用方法

目录 #平台差异说明 #基本使用 #传入富文本内容 #异步关闭 #点击遮罩关闭 #控制模态框宽度 #自定义样式 #缩放效果 #API #Props #Event #Method #Slots 弹出模态框,常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 #平台差异说明 AppH5微…

Transformer and Pretrain Language Models3-1

content transformer attention mechanism transformer structure​​​​​​​ pretrained language models language modeling pre-trained langue models(PLMs) fine-tuning approaches PLMs after BERT applications of masked LM frontiers of PLMs …

高校寝室卫生检查系统UML建模——活动图

学生查看历史的通知公告学生投诉寝室卫生检查 学生查看其他寝室的卫生情况 发起报修请求

Django笔记(六):DRF框架

首 前后端分离是互联网应用开发的标准使用方式,让前后端通过接口实现解耦,能够更好的进行开发和维护。 RESTful接口常见规范 在接口设计中,大家遵循一定的规范可以减少很多不必要的麻烦,例如url应有一定辨识度,可以…

单元测试、模块测试、web接口测试

单元测试与模块测试 什么是“单元测试”、“模块测试”? 然而在功能的实现代码中并没有“单元”,也没有“模块”;只有函数、类和方法。先来分别看看它们 的定义: 单元测试(Unit testing),是指…

Dify学习笔记-应用发布(四)

1、发布为公开 Web 站点 使用 Dify 创建 AI 应用的一个好处在于,你可以在几分钟内就发布一个可供用户使用的 Web 应用,该应用将根据你的 Prompt 编排工作。 如果你使用的是自部署的开源版,该应用将运行在你的服务器上 如果你使用的是云服务&…

Netty Reactor 模式解析

目录 Reactor 模式 具体流程 配置 初始化 NioEventLoop ServerBootstrapAcceptor 分发 Reactor 模式 在刚学 Netty 的时候,我们肯定都很熟悉下面这张图,它就是单Reactor多线程模型。 在写Netty 服务端代码的时候,下面…

【算法练习】leetcode算法题合集之栈和队列篇

普通栈 LeetCode20 有效的括号 LeetCode20 有效的括号 定义一个辅助map&#xff0c;判断字符串的字符是否在]})中。一旦是右括号就要弹出元素&#xff0c;判断匹配。 class Solution {public boolean isValid(String s) {if (s.length() % 2 1) {return false;}Map<Chara…

探索 XMLHttpRequest:网页与服务器的异步通信之道(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

多场景建模:阿里多场景多任务元学习方法M2M

multi-scenario multi-task meta learning approach (M2M) 背景 广告领域大部分是针对用户建模的&#xff0c;像点击率预估&#xff0c;很少有针对广告主需求建模&#xff08;广告消耗预估、活跃率/流失率预估、广告曝光量预估&#xff09;&#xff0c;广告的类型较多&#x…

k8s从初识到上天系列第一篇:初识kubernetes

&#x1f609;&#x1f609; 欢迎加入我们的学习交流群呀&#xff01; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、SpringSecurity、Docker、Grpc、各种MQ、Rpc、SpringCloud等等很多应用和源码…

CSS之高度塌陷和外边距塌陷

目录 1.高度塌陷&#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【解决办法】 【概念介绍-BFC】 【拓展-BFC的触发条件】 2.外边距塌陷 &#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【两种情况】 1.相邻块元素 2.嵌套块元素 【…

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…