现在有多个 WebApp,想用最小的代价实现 SSO 单点登录。所谓最小代价,我的理解就是对原有 WebApp 的改动最小,因此

  • 在旁路增加一个 SsoWebApp 用于管理 SSO 的账号,进行身份认证后实现跳转原有 WebApp;
  • 保留原有 WebApp 登录方式不做修改,增加一个单独的 sso 登录接口实现从 Ssoweb App 跳转登录。

具体的登录流程如下:
用户首先在 SsoWebApp 中完成登录,再通过链接清单,选择要跳转的目标 WebApp 的 sso 接口,为方便通过超级链接跳转,建议这个接口使用 GET 方式,当然要用 POST 方式也是可以的。
跳转链接示例

 http://WebApp1/sso?token=eyJ1aWQiOiIxMjM0NTYiLCAiZXhwaXJlIjoiMjAyMjA3MTUiLCAic2FsdCI6IjlENDdDRTI3LTU1MzEtNDRENS05QUUxLTVEMUQ3OUU2QUZFOCJ9

这里 token 的明码采用 json 描述

{
"uid":"123456", //用户账号
"expire":"20220715235900", //token 有效期
"salt":"9D47CE27-5531-44D5-9AE1-5D1D79E6AFE8" //其他数据
}

为防止 token 被纂改,可使用 RSA 私钥签名后 Base64 编码。

当 WebApp 的 sso 接口接收 token 后调用 SsoWebApp 的公钥解密方法还原出 json 进行判断

if (当前WebApp内存在(uid) && expire >= 当前时刻)
调用 WebApp 自己的登录验证方式,完成对 uid 的身份认证,进行正常的页面跳转
end if

要实现以上登录流程,旁路的 SsoWebApp 需要实现

  1. 用户账户的 CURD UI, 关键字段 uid, password
  2. 用户账户下 SSO 记录的 CURD UI,关键字段 uid, appName, ssoUrl
  3. 用户登录 UI 和显示可用 SSO 站点列表 UI(跳转链接)
  4. WebAPI 接口,提供公钥解密方法

以上 SSO 登录方案存在的一个不足,是用户在 SsoWebApp 的退出操作无法联动 WebApp 退出,反之亦然。

因为要实现登出联动,不可避免地需要改造 WebApp 的原有登出接口,可以实现只不过需要花费额外的代价了。

最小代价的 SSO 单点登录方案的更多相关文章

  1. CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  2. php sso单点登录原理阐述

    原理:就是用户登录了单点登录系统(sso)之后,就可以免登录形式进入相关系统: 实现: 点击登录跳转到SSO登录页面并带上当前应用的callback地址 登录成功后生成COOKIE并将COOKIE传给 ...

  3. CAS实现SSO单点登录原理(转)

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  4. [精华][推荐]CAS SSO 单点登录框架学习 环境搭建

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  5. [精华][推荐] CAS SSO单点登录环境搭建及实例

    1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...

  6. CAS SSO单点登录框架学习

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  7. CAS SSO单点登录实例

    1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...

  8. sso单点登录系统(解决session共享)

    场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服 ...

  9. 170810、spring+springmvc+Interceptor+jwt+redis实现sso单点登录

    在分布式环境中,如何支持PC.APP(ios.android)等多端的会话共享,这也是所有公司都需要的解决方案,用传统的session方式来解决,我想已经out了,我们是否可以找一个通用的方案,比如用 ...

  10. oauth2.0实现sso单点登录的方式和相关代码

    SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...

随机推荐

  1. 《最新出炉》系列入门篇-Python+Playwright自动化测试-53- 处理面包屑(详细教程)

    1.简介 面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了 ...

  2. ChatGPT的作用(附示例)

    ChatGPT介绍(内容由ChatGPT生成) ChatGPT是一款基于GPT(生成式预测网络)的聊天机器人,它可以根据用户输入自动生成相应的回复. GPT是由OpenAI开发的一种预测网络模型,其中 ...

  3. 【Git】01 下载安装(Windows)

    Git 官网地址:[点我访问] https://git-scm.com/ 点击这个电脑自动识别操作系统与系统位数 开始安装 安装的目录不要有中文就行[最好也不要有空格] 算了,直接全选[小孩子才做选择 ...

  4. 【SpringBoot】Re 02 Import与自定义装配实现

    Import的注册形式: 1.使用@Import导入一个或者多个类字节对象 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME ...

  5. 国产的AI基础设施与国外的差距?仅以grpc与prpc做比较

    搞AI,基础设施包括软件.硬件以及相关生态,多方面,这里只片面的取一个例子来说明国内外在AI基础设施上的区别,注意,这里只是片面截取. 高性能的rpc框架是搞AI的一个基础依赖软件,当然,国外也有与之 ...

  6. 【转载】 GPU地址空间的相关概念

    为了结合上篇 文章   https://www.cnblogs.com/devilmaycry812839668/p/13264080.html 对RTX显卡是否能够实现P2P通信功能,同时专业级别显 ...

  7. JUC高并发编程(二)之多线程下载支付宝对账文件

    1.背景 在实际开发中,经常会遇到支付需求,当然就会有支付对账的需求.... 2.项目结构 3.代码 3.1.线程池配置对象 @Configuration @EnableAsync public cl ...

  8. php日常收获

    php 1.sprintf 用法(晚上写成blog w3cschool可查) 2.使用thinkphp getfield 方法时只查询一个字段默认返回第一条数据, 如果想要返回数组需要写成: $thi ...

  9. MySQL如何区分大小写

    MySQL CRUD 问题描述 mysql在Windows下是不区分大小写的,而Linux下区分大小写,Windows下将script文件导入MySQL后表名也会自动转化为小写,如果导入Linux服务 ...

  10. Echarts 5 动态按需引入图表

    官网提供的按需引入方法为全量按需引入,在打包分离中,仍旧存在使用不到的图表被打包进去. 例如:组件A使用了折线图.柱状图,组件B只用到了折线图,但是打包组件B的时候,柱状图也就被打包进去. 本文提供一 ...