一、说明

单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。本文主要介绍 同域跨域 两种不同场景单点登录的实现原理,并使用 Spring Security 来实现一个最简单的跨域 SSO客户端

 

二、原理说明

单点登录主流都是基于共享 cookie 来实现的,下面分别介绍 同域跨域 下的两种场景具体怎样实现共享 cookie

2.1. 同域单点登录

适用场景:都是企业自己的系统,所有系统都使用同一个一级域名通过不同的二级域名来区分。

举个例子:公司有一个一级域名为 zlt.com ,我们有三个系统分别是:门户系统(sso.zlt.com)应用1(app1.zlt.com)应用2(app2.zlt.com),需要实现系统之间的单点登录,实现架构如下:

核心原理:

  1. 门户系统设置 Cookiedomain 为一级域名也就是 zlt.com,这样就可以共享门户的 Cookie 给所有的使用该域名(xxx.zlt.com)的系统
  2. 使用 Spring Session 等技术让所有系统共享 Session
  3. 这样只要门户系统登录之后无论跳转应用1或者应用2,都能通过门户 Cookie 中的 sessionId 读取到 Session 中的登录信息实现单点登录

 

2.2. 跨域单点登录

单点登录之间的系统域名不一样,例如第三方系统。由于域名不一样不能共享 Cookie 了,这样就需要通过一个单独的授权服务(UAA)来做统一登录,并基于共享UAA的 Cookie 来实现单点登录。

举个例子:有两个系统分别是:应用1(webApp.com)应用2(zlt.com)需要实现单点登录,另外有一个UAA授权中心(sso.com),实现架构如下:

核心原理:

  1. 访问系统1判断未登录,则跳转到UAA系统请求授权
  2. UAA系统域名 sso.com 下的登录地址中输入用户名/密码完成登录
  3. 登录成功后UAA系统把登录信息保存到 Session 中,并在浏览器写入域为 sso.comCookie
  4. 访问系统2判断未登录,则跳转到UAA系统请求授权
  5. 由于是跳转到UAA系统的域名 sso.com 下,所以能通过浏览器中UAA的 Cookie 读取到 Session 中之前的登录信息完成单点登录

 

2.3. 基于Oauth2的跨域单点登录流程

关于Oauth2的授权码模式这里就不做介绍了,自行找资料了解

 

三、Spring Security实现

Oauth2单点登录除了需要授权中心完成统一登录/授权逻辑之外

基于 Spring Security 实现的UUA统一授权中心可以参考:https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-uaa

各个系统本身(sso客户端)也需要实现以下逻辑:

  1. 拦截请求判断登录状态
  2. UAA授权中心 通过 Oauth2授权码模式 交互完成登录/单点登录
  3. 保存用户登录信息

以上逻辑只需使用一个 @EnableOAuth2Sso 注解即可实现

SpringBoot配置如下:

下图是访问 sso客户端@EnableOAuth2Sso 注解与 UAA授权中心 通过 Oauth2授权码模式 交互完成单点登录的步骤

请结合上面单点时序图中单点登录系统2的1~5步

PS:如果系统用的不是 Spring Security 怎么办?理解原理自行实现

 

四、demo下载地址

https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo

 
扫码关注有惊喜!

Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定的更多相关文章

  1. 前后端分离基于Oauth2的SSO单点登录怎样做?

    一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼:本文主要介绍跨域间的 前后端分离 项目怎样实现单点登录,并且与 非前后端分离 的差 ...

  2. Spring Security整合JWT,实现单点登录,So Easy~!

    前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况 ...

  3. 基于CAS实现SSO单点登录

    1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一 ...

  4. 基于CAS的SSO(单点登录)实例

    第一步 部署CAS-Server(服务端) 1.从CAS官方网站(http://developer.jasig.org/cas/)下载最新版本的CAS-Server(当前最新版本cas-server- ...

  5. 基于cookie的SSO单点登录系统

    利用COOKIE实现单点登录功能 近期公司要求帮一个项目实现单点登录功能,在综合考量下决定采用cookie实现,大概的流程如下图所:

  6. 基于CAS的SSO单点登录-实现ajax跨域访问的自动登录(也相当于超时重连)

    先补课,以下网址可以把CAS环境搭起来. [JA-SIG CAS服务环境搭建]http://linliangyi2007.iteye.com/blog/165307 [JA-SIG CAS业务架构介绍 ...

  7. MVC下基于DotNetOpenAuth 实现SSO单点登录

    具体官网可以查看:http://dotnetopenauth.net/,托管地址:https://github.com/DotNetOpenAuth/DotNetOpenAuth 可能需要FQ 博客园 ...

  8. 【SpringSecurityOAuth2】源码分析@EnableOAuth2Sso在Spring Security OAuth2 SSO单点登录场景下的作用

    目录 一.从Spring Security OAuth2官方文档了解@EnableOAuth2Sso作用 二.源码分析@EnableOAuth2Sso作用 @EnableOAuth2Client OA ...

  9. SSO单点登录思路

    SSO (Single Sign On) 什么是单点登录: 在大型的互联网公司中会有多个系统, 多个项目, 虽然这些项目都属于同一家公司, 但是项目本身其实都是独立的, 那多个系统可不可以实现共享同一 ...

随机推荐

  1. JdbcRDD连接MySQL

    (1)添加依赖 <dependencies> <dependency> <groupId>org.apache.spark</groupId> < ...

  2. linux 信号量sem实现 生产者—消费者(线程间通信)

    #include<pthread.h> #include<stdlib.h> #include<stdio.h> #include<unistd.h> ...

  3. centos6.8 yum安装mysql 5.6

    一.检查系统是否安装其他版本的MYSQL数据 #yum list installed | grep mysql #yum -y remove mysql-libs.x86_64 二.安装及配置 # w ...

  4. Metric space,open set

    目录 引入:绝对值 度量空间 Example: 开集,闭集 引入:绝对值 distance\(:|a-b|\) properties\(:(1)|x| \geq 0\),for all \(x \in ...

  5. Sass入门指南

    转自:http://www.imooc.com/article/1413 css预处理器已经算不上一个新鲜的词了,当前比较有代表性的css预处理器有sass.less.stylus.关于三者选择问题一 ...

  6. Django学习之视图层

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  7. getRandomInt getRandomString

    import java.util.concurrent.ThreadLocalRandom; private static final String AB = "ABCDEFGHIJKLMN ...

  8. MOOC(14)- 从数据库中获取预期结果

    数据库中的预期结果写的是SQL语句 从表格中读取到SQL语句,再去数据库获取真正的预期结果 # -*- coding: utf-8 -*- # @Time : 2020/2/18 9:50 # @Fi ...

  9. 如果你有一个域名,你也可以免费有一个diy@yourdomain.com的企业邮局

    如果你有一个域名,例如:www.bengou.net那么你可以拥有一个免费邮箱:lajiyoujian@bengou.net.那么什么是企业邮局呢?有啥优点 企业邮局是指以您的域名作为后缀的电子邮件地 ...

  10. MSSS攝影大賽計劃書(第三版)

    比賽內容:對香港的城市風景以及自然風光的攝影 預期成果: 提升同學對香港的認識,鼓勵學生走出大學學園去瞭解香港,同時豐富會員的課餘活動,培養同學的興趣愛好 比賽時間:4月1-15日 最後作品提交時間: ...