基于第三方开源框架xxl-sso单点登录的实现

本文介绍了XXL-SSO,一个支持轻量级、分布式、跨域的单点登录框架,详细讲解了其特性、快速入门步骤,包括SSOServer的搭建和核心概念,如登录、注销流程,以及Cookie和Token的使用方式。
摘要由CSDN通过智能技术生成

一、简介

1.1 概述

XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。
拥有”轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持”等特性。现已开放源代码,开箱即用。官方地址

1.2 特性

1、简洁:API直观简洁,可快速上手
2、轻量级:环境依赖小,部署与接入成本较低
3、单点登录:只需要登录一次就可以访问所有相互信任的应用系统
4、分布式:接入SSO认证中心的应用,支持分布式部署
5、HA:Server端与Client端,均支持集群部署,提高系统可用性
6、跨域:支持跨域应用接入SSO认证中心
7、Cookie+Token均支持:支持基于Cookie和基于Token两种接入方式,并均提供Sample项目
8、Web+APP均支持:支持Web和APP接入
9、实时性:系统登陆、注销状态,全部Server与Client端实时共享
10、CS结构:基于CS结构,包括Server”认证中心”与Client”受保护应用”
11、记住密码:未记住密码时,关闭浏览器则登录态失效;记住密码时,支持登录态自动延期,在自定义延期时间的基础上,原则上可以无限延期
12、路径排除:支持自定义多个排除路径,支持Ant表达式,用于排除SSO客户端不需要过滤的路径

1.3 环境

JDK:1.7+
Redis:4.0+

二、快速入门(基于Token)

2.1 “认证中心(SSO Server)” 搭建

“认证中心” 搭建成功后,默认为Token方式登陆提供API接口如下:

1、登陆接口:/app/login

参数:POST参数
username:账号
password:账号
响应:JSON格式
code:200 表示成功、其他失败
msg:错误提示
data: 登陆用户的 sso sessionid
2、注销接口:/app/logout

参数:POST参数
sessionId:登陆用户的 sso sessionid
响应:JSON格式
code:200 表示成功、其他失败
msg:错误提示
3、登陆状态校验接口:/app/logincheck

参数:POST参数
sessionId:登陆用户的 sso sessionid
响应:JSON格式
code:200 表示成功、其他失败
msg:错误提示
data:登陆用户信息
userid:用户ID
username:用户名

三、核心概念

  1. SSO Server 中央认证服务,支持集群
  2. SSO Client 接入SSO认证中心的Client应用
  3. SSO SessionId 登录用户会话ID,SSO 登录成功为用户自动分配
  4. SSO User 登录用户信息,与 SSO SessionId 相对应

3.1 登录流程剖析

  1. 用户于Client端应用访问受限资源时,将会自动 redirect 到 SSO Server 进入统一登录界面。
  2. 用户登录成功之后将会为用户分配 SSO SessionId 并 redirect 返回来源Client端应用,同时附带分配的 SSO SessionId。
  3. 在Client端的SSO Filter里验证 SSO SessionId 无误,将 SSO SessionId 写入到用户浏览器Client端域名下 cookie 中。
  4. SSO Filter验证 SSO SessionId 通过,受限资源请求放行。

3.2 注销流程剖析

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

3.3 基于Cookie,相关概念

  1. 登陆凭证存储:登陆成功后,用户登陆凭证被自动存储在浏览器Cookie中
    Client端校验登陆状态:通过校验请求Cookie中的是否包含用户登录凭证判断
    系统角色模型。
  2. SSO Server:认证中心,提供用户登陆、注销以及登陆状态校验等功能
    Client应用:受SSO保护的Client端Web应用,为用户浏览器访问提供服务
    用户:发起请求的用户,使用浏览器访问。

3.4 基于Token,相关概念

  1. 登陆凭证存储:登陆成功后,获取到登录凭证(xxl_sso_sessionid=xxx),需要主动存储,如存储在 localStorage、Sqlite 中。
    Client端校验登陆状态:通过校验请求 Header参数 中的是否包含用户登录凭证(xxl_sso_sessionid=xxx)判断;因此,发送请求时需要在 Header参数 中设置登陆凭证
    系统角色模型。
  2. SSO Server:认证中心,提供用户登陆、注销以及登陆状态校验等功能
  3. Client应用:受SSO保护的Client端Web应用,为用户请求提供接口服务
  4. 用户:发起请求的用户,如使用Android、IOS、桌面客户端等请求访问

3.5 未登录状态请求处理

基于Cookie,未登录状态请求:

页面请求:redirect 到SSO Server登录界面
JSON请求:返回未登录的JSON格式响应数据
数据格式:
code:501 错误码
msg:sso not login.
基于Token,未登录状态请求:

返回未登录的JSON格式响应数据
数据格式:
code:501 错误码
msg:sso not login.

3.6 登录态自动延期

支持自定义登录态有效期窗口,默认24H,当登录态有效期窗口过半时,自动顺延一个周期。

  1. 记住密码
    未记住密码时,关闭浏览器则登录态失效;记住密码时,登录态自动延期,在自定义延期时间的基础上,原则上可以无限延期。

  2. 路径排除
    自定义路径排除Path,允许设置多个,且支持Ant表达式。用于排除SSO客户端不需要过滤的路径。

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王八八。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值