《果然新鲜》电商项目(35)-SSO单点登录(XXL-SSO案例)

2022/1/18 23:42:11

本文主要是介绍《果然新鲜》电商项目(35)-SSO单点登录(XXL-SSO案例),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 引言
  • 1.单点登录
  • 2.XXL-SSO框架
  • 2. 单点登录原理(Cookie形式)
    • 2.1 登录流程
    • 2.2 登出流程
  • 3. 官方Demo分析
    • 3.1 SSO Server中央认证服务
    • 3.2 SSO Client应用(Cookie形式)
    • 3.3 SSO Client应用(Token形式)
  • 总结

引言

本文主要讲解单点登录集成到我们的电商项目,没有使用CAS框架,使用的是国产XXL-SSO框架,其原理大同小异,不影响思路。

阅读本文之前用一句话来概括单点登录的作用:

单点登录主要解决多个系统,统一登录

1.单点登录

在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。

但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于运营人员来说,很不方便。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。

单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

在这里插入图片描述

如图所示,图中有4个系统,分别是Application1Application2Application3、和SSO。Application1、Application2、Application3没有登录模块,而SSO只有登录模块,没有其他的业务模块,当Application1Application2Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也就随之登录了。这完全符合我们对单点登录(SSO)的定义。

2.XXL-SSO框架

我们先登录XXL-SSO官网:https://www.xuxueli.com/xxl-sso/

在这里插入图片描述
从上图可以看到XXL-SSO分布式单点登录框架有如下特性:

  • 轻量级
  • 分布式
  • 跨域
  • Cookie+Token均支持
  • Web+APP均支持

这些特性中,按功能分,我觉得主要是第三点“Cookie+Token均支持”,那这两种形式又是如何的呢?下文将详细描述。

2. 单点登录原理(Cookie形式)

学习单点登录前,必须了解下面几个角色

概念说明
SSO Server中央认证服务,支持集群
SSO Client接入SSO认证中心的Client应用(也就是我们的业务服务)
SSO SessionId登录用户会话ID,SSO 登录成功为用户自动分配
SSO User登录用户信息,与 SSO SessionId 相对应

2.1 登录流程

那Cookie形式如何实现单点登录的呢?官网的图是这样的:
在这里插入图片描述
登录流程:

  1. 用户Client端访问时会经过Filter,判断是否登录,如果没有登录,将会自动 redirect 到 SSO Server 进入统一登录界面。
  2. 用户登录成功之后SSO Server将会为用户分配 SessionId 并 redirect 返回来源Client端应用,同时附带分配的 SessionId。这是SSO Server域名下的Cookie也会写入SessionId。
  3. redirect返回后,在Client端的SSO Filter里验证 SessionId 无误,将 SessionId 写入到用户浏览器Client端域名下 cookie 中。
  4. SSO Filter验证 SessionId 通过,请求放行,登录成功。
  5. 另外一个Client访问时,也会进入Filter,因为SSO Server已经登录了,所以直接redirect,即走第2、3、4步了。

很多的人会问,第5步中,对“SSO Server已经登录,所以直接redirect,走2、3、4步”这一句话不是很理解,那如果换了浏览器,为什么就不能直接登录呢?

其实我曾经也有过这个疑问,其实不要忘记了还有第3步骤,SSO Server登录成功后,也会把SessoinId放入浏览器的Cookie中的,也就是放到SSO Server域名下的Cookie中,而新的浏览器中,SSO Server域名下Cookie没有登录成功返回的SessionId,所以SSO Server就判断该Client没有登录了。

2.2 登出流程

登出流程又是如何的呢?

用户与Client端应用请求注销Path时,将会 redirectSSO Server 自动销毁全局 SSO SessionId,实现全局销毁。
然后,访问接入SSO保护的任意Client端应用时,SSO Filter 均会拦截请求并 redirectSSO Server 的统一登录界面。

3. 官方Demo分析

首先我们从Github 克隆XXL-SSO的源码到本地(https://github.com/xuxueli/xxl-sso.git):
在这里插入图片描述
下载完源码,我们可以看到目录结构如下:
在这里插入图片描述

3.1 SSO Server中央认证服务

打开xxl-sso-server目录,可以看到有如下结构:
在这里插入图片描述
他们分别表示:
在这里插入图片描述
打开xxl-sso-server的配置文件,可以看到需要配置Redis地址,在这里配置好Redis地址:
在这里插入图片描述
启动xxl-sso-server
在这里插入图片描述

日志文件的位置!

可以看到启动成功:
在这里插入图片描述

3.2 SSO Client应用(Cookie形式)

SSO 认证中心已经配置好并打开了,下面我们来看看SSO Client端。

打开samples下的xxl-sso-web-sample-springboot项目,并配置redis路径(与认证中心的一致):
在这里插入图片描述
在上图可以看到xxl.sso.server对应的值为:http://xxlssoserver.com:8080/xxl-sso-server,这里用到了域名,所以要在我们本地localhost文件里配置域名
在这里插入图片描述

启动成功:
在这里插入图片描述
浏览器输入:http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot
在这里插入图片描述
可以看到自动跳转到了SSO 认证服务中心的登录页面了,url地址变为如下,可以看到携带了一个redirect_url,指的就是登录成功后重定向的地址:

http://xxlssoserver.com:8080/xxl-sso-server/login?redirect_url=http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/

为了更好的验证单点登录,我们复制xxl-sso-web-sample-springboot项目命名为xxl-sso-web-sample-springboot8083,并设置端口号为8083
在这里插入图片描述

并在hosts文件增加配置:

在这里插入图片描述启动复制的项目

好了,可以开始验证了。首先浏览器输入Client1服务地址:http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot,会自动跳转到授权中心:
在这里插入图片描述
点击登录,可看到登录成功,而且登录成功后的sessionid在地址栏也能看到。
在这里插入图片描述
接下来看看Client2是否需要再次登录,浏览器输入:http://xxlssoclient2.com:8083/xxl-sso-web-sample-springboot

可以看到Client2也登录成功了,而且sessionid与Client1的一样。

最后,我们看看浏览器的Cookie信息,观察发现他们的sessionid也是一致的:

clinent1
在这里插入图片描述
client2
在这里插入图片描述
打开Redis可视化窗口,可以看到Redis服务器有保存SessionId:
在这里插入图片描述

3.3 SSO Client应用(Token形式)

其实基于Token的形式去单点登录与基于Cookie形式大同小异的。相对于Cookie的形式,只是少了个跳转登录界面。根据xxl-sso的官方文档,直接使用PostMan来演示。

首先演示登录(url:http://xxlssoserver.com:8080/xxl-sso-server/app/login?username=user&password=123456
在这里插入图片描述
可以是直接访问了SSO Server的登录接口,返回的data就是sessoinid了,其它客户端可以使用这个sessionid来实现单点登录。

启动xxl-sso-token-sample-springboot项目(端口号8082):
在这里插入图片描述

postman请求,注意sessionid放到请求头:
在这里插入图片描述
登录成功!

总结

本文主要讲解了单点登录的相关概念,已经使用xxl-sso框架来做演示。



这篇关于《果然新鲜》电商项目(35)-SSO单点登录(XXL-SSO案例)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程