当前位置: 首页 > news >正文

Spring Authorization Server:实现OAuth2认证服务

Spring Authorization Server为构建安全的SpringBoot应用提供了一系列解决方案,本节课程我们将结合OAuth2来实现认证服务,该认证服务将支持常用的OAuth2授权模式和刷新Token。

Spring Authorization Server简介

Spring Authorization Server是一个安全框架,它提供了OAuth 2.1和OpenID Connect 1.0规范以及其他相关的实现。Spring Authorization Server是在Spring Security的基础上构建的,它为构建OAuth2授权服务和OpenID Connect 1.0身份提供者提供了一个安全、轻量级、可定制的基础。

OAuth2基本概念

在使用Spring Authorization Server之前,我们需要先对OAuth2有个大致了解,这里我们先来学习下。

简介

OAuth2协议定义了一系列关于认证授权的标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息。目前主流第三方平台提供的授权登录基本都是基于Oauth2协议的,例如微信、QQ、GitHub和Gitee等。而我们要学习的Spring Authorization Server也是基于OAuth2协议的。

相关名词

  • 资源拥有者(Resource owner):拥有该资源的最终用户,他拥有访问资源的账号密码。
  • 资源服务器(Resource server):拥有受保护资源的服务器,如果请求包含正确的访问令牌,可以访问资源。
  • 客户端(Client):访问资源的客户端,会使用访问令牌去获取资源服务器的资源,可以是浏览器、移动设备或者服务器。
  • 认证服务器(Authorization server):用于认证用户的服务器,如果客户端认证通过,发放访问资源服务器的令牌。

授权模式

  • 授权码模式(Authorization Code Grant):功能最完整、流程最严密的Oauth2授权模式。客户端先将用户导向认证服务器,登录后获取授权码,然后进行授权,最后根据授权码获取访问令牌。
  • PKCE授权码模式(Proof Key for Code Exchange):授权码模式的扩展模式,使用授权码授权的OAuth2公共客户端容易受到授权码拦截攻击的影响,该模式通过使用代码交换证明密钥来抵御威胁,可以减轻攻击。
  • 客户端模式(Client Credentials):客户端以自己的名义,而不是以用户的名义,向认证服务器进行认证,从而获取访问令牌。
  • 设备授权码模式(Device Authorization Grant):是一种凭证式授权类型,主要为那些没有浏览器或输入受限的设备提供认证方式。在这种模式下,设备会引导用户在另一台设备的浏览器中打开一个网页进行登录。用户完成登录后,设备就能够获取所需的访问令牌。

两种常用授权模式

授权码模式

具体流程如下:

  • (1)客户端将用户导向认证服务器;
  • (2)用户在认证服务器进行登录并授权;
  • (3)认证服务器返回授权码给客户端;
  • (4)客户端通过授权码和跳转地址向认证服务器获取访问令牌;
  • (5)认证服务器发放访问令牌(有需要带上刷新令牌)。

客户端模式

具体流程如下:

  • (1)客户端以自己的名义向认证服务器获取访问令牌;
  • (2)认证服务器发放访问令牌。

搭建认证服务

接下来我们将创建一个authorization-server模块,用于演示OAuth2的授权码模式和客户端模式。

项目准备

  • 在项目的pom.xml中添加相关依赖;

<dependencies><!--oauth2认证服务相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-authorization-server</artifactId></dependency><!--SpringBoot Web相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--持久层框架Mybatis依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-spring-boot-starter.version}</version></dependency><!--thymeleaf页面模版引擎依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--由于html中引入了bootstrap,所以需要添加该依赖--><dependency><groupId>org.webjars</groupId><artifactId>webjars-locator-core</artifactId></dependency><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>5.2.3</version></dependency>
</dependencies>

  • 在MySQL中初始化Spring Authorization Server需要的数据库表,该表结构在spring-security-oauth2-authorization-server-xxx.jar中,有如下3个脚本;

  • 这里已经整理好了一份脚本,创建数据库authorization-server,直接执行如下sql脚本即可。

-- oauth2认证许可表
CREATE TABLE oauth2_authorization_consent
(registered_client_id varchar(100)  NOT NULL,principal_name       varchar(200)  NOT NULL,authorities          varchar(1000) NOT NULL,PRIMARY KEY (registered_client_id, principal_name)
);
-- oauth2认证信息表
CREATE TABLE oauth2_authorization
(id                            varchar(100) NOT NULL,registered_client_id          varchar(100) NOT NULL,principal_name                varchar(200) NOT NULL,authoriz
http://www.lryc.cn/news/482974.html

相关文章:

  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • ScrumMaster认证机构及CSM、PSM、RSM价值解析
  • 借助 Pause 容器调试 Pod
  • PostgreSQL 开启密码验证插件
  • Go 语言已立足主流,编程语言排行榜24 年 11 月
  • flutter下拉刷新上拉加载的简单实现方式三
  • 【C++ 20进阶(2):属性 Attribute】
  • 【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法
  • 力扣617:合并二叉树
  • 软件设计师 - 第1章 计算机网络概论
  • 方案丨车险保单OCR:3秒钟完成保单审核
  • Jmeter中的监听器(一)
  • C++ 标准库 std::vector 的介绍
  • 鸿蒙开发-装饰器@Link问题
  • CTFhub靶场RCE学习
  • 一文3000字从0到1带你进行Mock测试(建议收藏)
  • 数据结构 ——— 链式二叉树的销毁(释放)
  • log4j异常堆栈文件输出
  • 在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  • SpringSecurity源码中核心类
  • 【JAVA】使用IDEA创建maven聚合项目
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 概率论中的PMF、PDF和CDF
  • Vue 简单入手
  • Github配置ssh key原理及操作步骤
  • 大循环引起CPU负载过高
  • [Java]微服务治理
  • 深入解析C语言中的extern关键字:语法、工作原理与高级应用技巧
  • 元器件封装
  • 状态空间方程离散化(Matlab符号函数)卡尔曼