现在有多个 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. 《Programming from the Ground Up》阅读笔记:p88-p94

    <Programming from the Ground Up>学习第5天,p88-p94总结,总计7页. 一.技术总结 1.touppercase.s #PURPOSE: This pr ...

  2. python获取引用对象的个数

    python获取引用对象的个数 使用sys.getrefcount()来获取当前对象被引用了多少次,返回的结果比实际大1 import sys class A: pass a = A() #创建实例对 ...

  3. windows10使用scp命令

    windows10使用scp命令 windows自带scp命令 windows上传文件到linux//使用方法:scp 源文件路径 账户@地址:目的路径scp   C:\Users\zbh\Deskt ...

  4. 【Java】【常用类】Math 数学类

    一些常用的数学计算方法 public class MathTest { public static void main(String[] args) { int a = -10; // 获取绝对值 i ...

  5. 【C3】01 概述

    CSS (层叠样式表) 让你可以创建好看的网页,但是它具体是怎么工作的呢? 这篇文章通过一些很简单的例子,告诉我们什么是 CSS, 同时还会涉及一些和 CSS 相关的专业术语. 预备知识: 基本的计算 ...

  6. 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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...

  7. openAI的仿真环境Gym Retro的Python API接口

    如题,本文主要介绍仿真环境Gym Retro的Python API接口 . 官网地址: https://retro.readthedocs.io/en/latest/python.html ===== ...

  8. Docker 之 RabbitMQ安装教程 基于腾讯云

    由于需要学习RabbitMQ(主要是项目启动了mq本地却没有服务控制台老是在连mq,致使我热部署都不知道到底成功没),所以才有了这个教程,下面介绍RabbitMQ准备工作 下载所需环境 yum -y ...

  9. disconf分布式配置管理(一) 安装与配置

    一.背景 在生产部署过程中,遇到以下问题: 1.由于节点较多,每次增量修改配置文件后都需要每个节点替换配置文件. 2.有些动态配置修改后,需要重启服务. 二.解决方案 1.使用linux文件共享配置文 ...

  10. JavaScript 的优雅编程技巧:Singleton Pattern

    JavaScript 的优雅编程技巧:Singleton Pattern 定义 单例模式:保证一个类仅有一个实例,并提供一个访问的全局访问点. 特点 仅有一个实例对象 全局都可访问该实例 主动实例化 ...