最小代价的 SSO 单点登录方案
现在有多个 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 需要实现
- 用户账户的 CURD UI, 关键字段 uid, password
- 用户账户下 SSO 记录的 CURD UI,关键字段 uid, appName, ssoUrl
- 用户登录 UI 和显示可用 SSO 站点列表 UI(跳转链接)
- WebAPI 接口,提供公钥解密方法
以上 SSO 登录方案存在的一个不足,是用户在 SsoWebApp 的退出操作无法联动 WebApp 退出,反之亦然。
因为要实现登出联动,不可避免地需要改造 WebApp 的原有登出接口,可以实现只不过需要花费额外的代价了。
最小代价的 SSO 单点登录方案的更多相关文章
- CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- php sso单点登录原理阐述
原理:就是用户登录了单点登录系统(sso)之后,就可以免登录形式进入相关系统: 实现: 点击登录跳转到SSO登录页面并带上当前应用的callback地址 登录成功后生成COOKIE并将COOKIE传给 ...
- CAS实现SSO单点登录原理(转)
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- [精华][推荐]CAS SSO 单点登录框架学习 环境搭建
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- [精华][推荐] CAS SSO单点登录环境搭建及实例
1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...
- CAS SSO单点登录框架学习
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- CAS SSO单点登录实例
1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...
- sso单点登录系统(解决session共享)
场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服 ...
- 170810、spring+springmvc+Interceptor+jwt+redis实现sso单点登录
在分布式环境中,如何支持PC.APP(ios.android)等多端的会话共享,这也是所有公司都需要的解决方案,用传统的session方式来解决,我想已经out了,我们是否可以找一个通用的方案,比如用 ...
- oauth2.0实现sso单点登录的方式和相关代码
SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...
随机推荐
- 《Programming from the Ground Up》阅读笔记:p88-p94
<Programming from the Ground Up>学习第5天,p88-p94总结,总计7页. 一.技术总结 1.touppercase.s #PURPOSE: This pr ...
- python获取引用对象的个数
python获取引用对象的个数 使用sys.getrefcount()来获取当前对象被引用了多少次,返回的结果比实际大1 import sys class A: pass a = A() #创建实例对 ...
- windows10使用scp命令
windows10使用scp命令 windows自带scp命令 windows上传文件到linux//使用方法:scp 源文件路径 账户@地址:目的路径scp C:\Users\zbh\Deskt ...
- 【Java】【常用类】Math 数学类
一些常用的数学计算方法 public class MathTest { public static void main(String[] args) { int a = -10; // 获取绝对值 i ...
- 【C3】01 概述
CSS (层叠样式表) 让你可以创建好看的网页,但是它具体是怎么工作的呢? 这篇文章通过一些很简单的例子,告诉我们什么是 CSS, 同时还会涉及一些和 CSS 相关的专业术语. 预备知识: 基本的计算 ...
- python网络连接报错:ValueError("Unable to determine SOCKS version from %s" % proxy_url) ValueError: Unable to determine SOCKS version from socks://192.168.1.100:1080/
python应用proxy网络连接报错: return super().send(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...
- openAI的仿真环境Gym Retro的Python API接口
如题,本文主要介绍仿真环境Gym Retro的Python API接口 . 官网地址: https://retro.readthedocs.io/en/latest/python.html ===== ...
- Docker 之 RabbitMQ安装教程 基于腾讯云
由于需要学习RabbitMQ(主要是项目启动了mq本地却没有服务控制台老是在连mq,致使我热部署都不知道到底成功没),所以才有了这个教程,下面介绍RabbitMQ准备工作 下载所需环境 yum -y ...
- disconf分布式配置管理(一) 安装与配置
一.背景 在生产部署过程中,遇到以下问题: 1.由于节点较多,每次增量修改配置文件后都需要每个节点替换配置文件. 2.有些动态配置修改后,需要重启服务. 二.解决方案 1.使用linux文件共享配置文 ...
- JavaScript 的优雅编程技巧:Singleton Pattern
JavaScript 的优雅编程技巧:Singleton Pattern 定义 单例模式:保证一个类仅有一个实例,并提供一个访问的全局访问点. 特点 仅有一个实例对象 全局都可访问该实例 主动实例化 ...