首页 > 其他分享 >高可用!一个基于 SpingBoot + Oauth2 的单点认证授权中心!

高可用!一个基于 SpingBoot + Oauth2 的单点认证授权中心!

时间:2024-09-19 09:12:28浏览次数:9  
标签:Oauth2 单点 登录 SpingBoot sso 服务端 smart 客户端

大家好,我是 Java陈序员

现代企业中,往往包含多个系统,如果每个系统都需要登录注册,这样的用户体验很不好!

这时,就需要设计一个单点登录系统,一次登录处处登录,一次退出处处退出!

今天,给大家介绍一个基于 SpingBoot + Oauth2 的单点认证授权中心,支持分布式高可用!

关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。

项目介绍

Smart-SSO —— 依托当下备受青睐的 SpringBoot 技术,以 OAuth2 认证结合 RBAC 权限设计为基础,为您塑造一个轻量级、高可用的单点认证授权中心。

功能说明

  • 轻量级:基于 SpringBoot 和 OAuth2 协议的授权码模式极简实现
  • 单点退出:客户端应用在获取 Token 时,隐性把自身的注销地址传递给服务端,在任意客户端应用操作退出,服务端通过远程通知所有客户端应用注销本地 Token,完成单点退出
  • 自动续签:使用 OAuth2 协议的 accessToken 策略,过期由客户端后端自动调用 refreshToken 刷新接口,并更新服务端凭证存根时效,完成过期自动续签
  • 跨域支持:服务端和客户端允许在不同域名下,完成跨域的单点登录和退出机制;
  • 前后端分离: 用户在前后端分离的架构下(无 Cookie 模式),也能轻易实现单点登录的相关功能
  • 按钮级权限:服务端对权限进行菜单和按钮分类,通过请求 uri 和请求方法匹配的方式实现权限按钮级控制
  • 分布式部署:服务端和客户端都支持基于 Redis 共享 Token 的多实例部署场景

技术栈

  • SpringBoot:容器 + MVC 框架
  • Redis:分布式场景 Token 管理
  • Freemarker:模板引擎
  • SpringFox:文档
  • Mybatis-Plus:ORM 框架
  • Mysql:数据库驱动
  • HttpClient:授权码认证、客户端和服务端通信

实现原理

单点登录

单点退出

项目截图

单点登录页

客户端示例登录成功页

服务端管控页

快速上手

1、拉取代码,并将项目以 Maven 的形式导入到 IDEA 中

git clone https://github.com/a466350665/smart-sso.git

2、项目结构

smart-sso
├── smart-sso-demo -- 客户端示例
├── smart-sso-demo-h5 -- 前后端分离客户端示例
├── smart-sso-server -- 单点登录权限管理服务端
├── smart-sso-starter -- 依赖装配模块
│   ├── smart-sso-starter-base -- 公用的基础常量、工具、凭证清理机制
│   ├── smart-sso-starter-client -- 客户端依赖包,客户端Token生命周期管理
│   ├── smart-sso-starter-client-redis -- 客户端依赖装配,分布式部署场景redis支持
│   ├── smart-sso-starter-server -- 服务端依赖包,服务端凭证生命周期管理
│   ├── smart-sso-starter-server-redis -- 服务端依赖装配,分布式部署场景redis支持

3、创建数据库

CREATE DATABASE `smart-sso` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4、执行 db/smart-sso.sql 脚本,初始化数据库数据

5、修改服务端 smart-sso-server 配置文件 application.yaml 中的数据库连接配置,改成自己的连接信息

6、在使用时需要给服务端和客户端配置不同的域名,需要找到并修改 hosts 文件,增加域名本地映射

127.0.0.1 server.smart-sso.com
127.0.0.1 demo.smart-sso.com

hosts 文件目录:

  • Windows:C:\Windows\System32\drivers\etc\hosts
  • Mac:/private/etc/hosts

7、分别执行 openjoe.smart.sso.server.ServerApplicationopenjoe.smart.sso.demo.DemoApplication 主启动类启动服务端服务、客户端服务

8、登录验证,浏览器访问客户端 http://demo.smart-sso.com:8081,会自动跳转至单点登录页,登录成功后重定向至客户端首页

默认的账号密码是:admin/123456

接入指南

在前面快速上手中,简单实现了 Smart-SSO 本地化部署使用,那么当部署好后 Smart-SSO 后,客户端如何接入呢?只需要以下简单的几步即可实现!

服务端登记

1、在服务端管控应用菜单下,添加应用。

2、记录应用认证授权需要的密钥信息,后续配置会用到。

客户端注册

1、引入依赖

<dependency>
    <groupId>io.github.openjoe</groupId>
    <artifactId>smart-sso-starter-client</artifactId>
    <version>${smart.sso.version}</version>
</dependency>

2、配置单点登录信息

smart:
  sso:
    # 服务端地址
    server-url: http://server.smart-sso.com:8080
    # 客户端ID
    client-id: 1003
    # 客户端密钥
    client-secret: 274319b61fb8eac12f88b8893d544365
    # 客户端排除拦截 urls,默认为空,支持 AntPathMatcher 匹配
    exclude-urls:
      - /oa/demo/page
      - /oa/demo/i18n
    # 客户端拦截 urls,默认通配所有路径,支持 AntPathMatcher 匹配
    url-patterns:
      - /oa/*
  1. server-url 为服务端地址
  2. client-idclient-secret 是步骤一在服务端登记时生成的密钥信息,用于客户端向服务端发起 accessToken 请求做校验

验证使用

1、启动客户端服务,当访问 http://{ip:port}/oa/demo/page 或者 http://{ip:port}/oa/demo/i18n 时,发现不用鉴权,因为配置在 smart.sso.exclude-urls 中,从而不会跳转至服务端登录页。

2、启动客户端服务,当访问 hhttp://{ip:port}/oa/demo/list 时,需要重定向至服务端登录页进行登录鉴权。因为 smart.sso.urls-patterns 所匹配,需要鉴权后才能访问。

客户端获取用户权限信息

在客户端中,常常因为业务功能需求,需要获取当前用户信息,可通过如下方式获取用户信息和权限信息

用户信息

TokenUser user = ClientContextHolder.getUser(request);
// 登录用户名
user.getUsername();
// 用户ID
user.getId();

权限信息

TokenPermission permission = ClientContextHolder.getPermission(request);
// 用户当前应用已分配的菜单
permission.getMenuList();
// 用户当前应用已分配的权限
permission.getPermissionSet());

可以说 Smart-SSO 实现了业界通用的单点登录系统方案,前后端分离模式和高可用的部署使用,可参考项目文档。

如果你想实现一套单点认证授权中心,值得参考借鉴~

项目地址:https://github.com/a466350665/smart-sso

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!


标签:Oauth2,单点,登录,SpingBoot,sso,服务端,smart,客户端
From: https://www.cnblogs.com/codechen8848/p/18418078

相关文章

  • 基于Node.js+vue基于SpingBoot的剧本杀管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景近年来,随着桌游文化的兴起与线上娱乐的蓬勃发展,剧本杀作为一种集角色扮演、逻辑推理与社交互动于一体的新型娱乐方式,迅速在年轻人中走红。然而,传统的剧本杀......
  • 剖析 SSO 和 OAuth:解锁单点登录与授权的技术密码
    一、概念介绍1.1SSO:单点登录SSO(SingleSign-On,单点登录)是一种身份验证方法,允许用户通过身份提供商(IdP)进行一次身份验证即可访问多个应用程序,它的核心目标是减少用户在不同系统之间重复输入用户名和密码的繁琐操作,提高用户体验和工作效率图片如图,SSO是抽出登录的模块,A......
  • 毕业设计—Spingboot休闲食品类微博数据的可视分析方法研究 (案例分析)
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对休闲食品类微博数据等问题,对休闲食品类微博数据进行研究分析,然后开发设计出休闲食品类微博数......
  • 【Spring】搭建SpringBoot + OAuth2认证授权服务
    文章目录一、环境准备二、创建SpringBoot项目1.使用SpringInitializr2.使用IDE导入项目三、配置数据源四、添加用户实体和存储五、配置SpringSecurity六、配置OAuth2七、创建控制器八、创建前端页面九、运行和测试十、总结本文将详细介绍如何使用最新版本的Spr......
  • SSO单点登录实现原理
    单点登录(SingleSign-On,SSO)是一种用户身份验证过程,允许用户在多个应用程序或服务之间进行无缝访问,而无需在每次访问时重复输入用户名和密码。SSO的实现可以大大提高用户体验并减少密码管理的复杂性。SSO实现的基本原理用户认证:用户访问某个应用程序(ServiceProvider,SP),该应......
  • 单点登录SSO
    单点登录(SingleSign-On,简称SSO)是一种会话和用户身份验证技术,它允许用户通过一次登录访问多个应用程序和服务。什么是单点登录?单点登录是指用户只需要在一个地方(如一个网站或一个应用程序)进行一次身份验证(通常是通过用户名和密码),就可以在不需要再次输入凭证的情况下访问多......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系统逐......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系......
  • 单点登录OAuth2.0
    OAuth2.0(OpenAuthorization2.0)是OAuth协议的第二个版本,于2012年正式成为RFC6749标准。在OAuth2.0之前,OAuth1.0版本已经为Web应用提供了一定程度的授权功能,但随着时间的推移,这些版本逐渐显露出一些不足,如复杂性较高、灵活性不足等。因此,OAuth2.0应运而生,旨在解决这些问题......
  • Java中的服务端点认证与授权:JWT与Spring Security OAuth2
    Java中的服务端点认证与授权:JWT与SpringSecurityOAuth2大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Java应用中实现服务端点的认证与授权,重点关注JWT(JSONWebToken)和SpringSecurityOAuth2。我们将通过实际代码示例展......