Spring官宣新家族成员:Spring Authorization Server

news2024/10/2 20:29:39

8月17日,Spring官方宣布 Spring Authorization Server 已正式脱离实验状态,并进入Spring-Project家族!

背景

  • Spring Authorization Server (以下简称 SAS)是 Spring 团队最新开发适配 OAuth 协议的授权服务器项目,旨在替代原有的 Spring Security OAuth Server。

  • 经过半年的开发和孵化,目前已经发布了 0.2.0 版本,已支持授权码、客户端、刷新、注销等 OAuth 协议。

  • 目前 SAS 项目已经迁移至官方正式仓库维护,成为官方的正式子项目。

  • 本文环境基于 Spring Boot 2.5.3 && SAS 0.2.0

开始上手

1. 核心依赖

  • 这里需要 SAS 、Security, 注意看注释

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2. 配置 security 安全认证

  • 定义用户来源及其 form 认证的信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

3. 配置 SAS 服务器

 
 

@Configuration @EnableWebSecurity public class AuthServerConfiguration { // security 挂载 SAS 【最重要的一步】 @Bean @Order(Ordered.HIGHEST_PRECEDENCE) public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); return http.formLogin(Customizer.withDefaults()).build(); } // 客户端来源 @Bean public RegisteredClientRepository registeredClientRepository() { RegisteredClient client = RegisteredClient.withId("pig") .clientId("pig") .clientSecret("{noop}pig") .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) .authorizationGrantTypes(authorizationGrantTypes -> { authorizationGrantTypes.add(AuthorizationGrantType.AUTHORIZATION_CODE); authorizationGrantTypes.add(AuthorizationGrantType.REFRESH_TOKEN); }) .redirectUri("https://pig4cloud.com") .build(); return new InMemoryRegisteredClientRepository(client); } // 以下两个bean 定义 生成jwt 的配置,可以直接参考文末源码介绍,这里就不在截图 @Bean @SneakyThrows public JWKSource<SecurityContext> jwkSource() { .... } @Bean public static JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) { ... } }

测试运行

通过以上配置即可搭建完成 SAS 服务端,我们以授权码模式测试

  • 浏览器访问如下链接,会重定向至登录页

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 输入账号密码后,会携带 code 自动回调至目标页面

  • 使用 code 换 token

 
 

curl --location --request POST 'http://localhost:3000/oauth2/token' \ > --header 'Authorization: Basic cGlnOnBpZw==' \ > --header 'Content-Type: application/x-www-form-urlencoded' \ > --data-urlencode 'grant_type=authorization_code' \ > --data-urlencode 'code=dn0GmDB-4hAfg-Kc9luUkuqZn4keJF9ZkUTlmcSRnYn8uzfEV9Ih429MH-9O77TPEVqPxXAJLPgxq-znOpiI-28Sek305db8Rezd46ods95FrjCSMq_HAswCtAJV4Vrt' \ > --data-urlencode 'redirect_uri=https://pig4cloud.com' _bAZ1dy39HDUHuosxtGPsw49wWuqZQTcMbr9YojbyUMkR7k30zAAByjUmkXzjaS4T-EIaA","refresh_token":"YlxCAnSyvtq1HcKqE3D3o-P_lT90wxdRQ6jfWbwQoKQaeFUZr51gQQQawSfpUUH4yf9kW51v7ENH2o4pDot7yIeN2tljVpKU6zuolj6gFKq0uDA6KkDDz54cDzfx1aw4","token_type":"Bearer","expires_in":"299"}

  • 刷新 token

 
 

curl --location --request POST 'http://localhost:3000/oauth2/token' \ > --header 'Authorization: Basic cGlnOnBpZw==' \ > --header 'Content-Type: application/x-www-form-urlencoded' \ > --data-urlencode 'grant_type=authorization_code' \ > --data-urlencode 'code=dn0GmDB-4hAfg-Kc9luUkuqZn4keJF9ZkUTlmcSRnYn8uzfEV9Ih429MH-9O77TPEVqPxXAJLPgxq-znOpiI-28Sek305db8Rezd46ods95FrjCSMq_HAswCtAJV4Vrt' \ > --data-urlencode 'redirect_uri=https://pig4cloud.com' _bAZ1dy39HDUHuosxtGPsw49wWuqZQTcMbr9YojbyUMkR7k30zAAByjUmkXzjaS4T-EIaA","refresh_token":"YlxCAnSyvtq1HcKqE3D3o-P_lT90wxdRQ6jfWbwQoKQaeFUZr51gQQQawSfpUUH4yf9kW51v7ENH2o4pDot7yIeN2tljVpKU6zuolj6gFKq0uDA6KkDDz54cDzfx1aw4","token_type":"Bearer","expires_in":"299"}% lengleng@MacBook-Pro  ~/Downloads/auth-server-demo   password ±  lengleng@MacBook-Pro  ~/Downloads/auth-server-demo   password ±  curl --location --request POST 'http://localhost:3000/oauth2/token' \ > --header 'Authorization: Basic cGlnOnBpZw==' \ > --header 'Content-Type: application/x-www-form-urlencoded' \ > --data-urlencode 'grant_type=refresh_token' \ > --data-urlencode 'refresh_token=YlxCAnSyvtq1HcKqE3D3o-P_lT90wxdRQ6jfWbwQoKQaeFUZr51gQQQawSfpUUH4yf9kW51v7ENH2o4pDot7yIeN2tljVpKU6zuolj6gFKq0uDA6KkDDz54cDzfx1aw4' \ > {"access_token":"eyJraWQiOiI2YmU4YzhlYi0wNDA2LTQxZGMtOGE2ZS0xOWZmNThlYzY4MTIiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJsZW5nbGVuZyIsImF1ZCI6InBpZyIsIm5iZiI6MTYyOTM2OTc2OSwiZXhwIjoxNjI5MzcwMDY5LCJpYXQiOjE2MjkzNjk3Njl9.dj_ktchQnTKRXGSQK7EZ3FAdz8StPOo27rURdCI8FN6jM3RFRD0s67v4LB1SRexl5KKHPuH6yYHhlr_u0um8ZpeQIrkumA2COukJAzy5O3SLsBYvLqipz-Ea9h9RZvC7EQZG-AbVJ378X214WxdsOYj1UPTv4Iegy4QsgERJSijINrCQZc0msHqSWIc_p61o2KIc8qaekrkZgY_JqCOz8K7x6drKvJ5gyWc9CyzeOrob5WrJfQGqqhjwjTl76g-9YyZ5Q97LX5lKRh8HOU6AUgKCyd4Jdol6PR6CkYd3gd4kyd5Ra7c3GbhzGUaxDrez79NDPx0aRAB9GA9mSohtsw","refresh_token":"YlxCAnSyvtq1HcKqE3D3o-P_lT90wxdRQ6jfWbwQoKQaeFUZr51gQQQawSfpUUH4yf9kW51v7ENH2o4pDot7yIeN2tljVpKU6zuolj6gFKq0uDA6KkDDz54cDzfx1aw4","token_type":"Bearer","expires_in":"299"}%

撤销令牌

  • 通过 access_token

 
 

curl --location --request POST 'http://localhost:3000/oauth2/revoke' \ --header 'Authorization: Basic cGlnOnBpZw==' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'token=eyJraWQiOiI0NmM3Zjk0OS01NmZmLTRlMjgtYmI4Zi0wNjZjYWU4ODllNDkiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJsZW5nbGVuZyIsImF1ZCI6InBpZyIsIm5iZiI6MTYyOTM0MzM4NiwiZXhwIjoxNjI5MzQzNjg2LCJpYXQiOjE2MjkzNDMzODZ9.avRZ9NuybP8bqenEstvDq3SAKuSI6Y3ihh2PqeiQvwkUAWBPY6N9JCaxJllKhrcS6OgL76I38Yvt0B1ICMFistqemWl1rxQUB2aXpZuTwnPjxtxV6deDxyr--Y1w7I9jVpT5jnaqOXDIZ6dhIlUCfqBPT9a4DmwuEsz5H60KUO-NbMM66DPDxvTgauuylhrjiPQgaDyaxFHbtdw6qq_pgFI023fkIASodauCFiUcl64HKV3or9B3OkXW0EgnA553ofTbgz0hlROMfee15wuzOAXTUkhlUOjjosuEslimT9vFM9wtRza4o864Gi_j_zIhIoSSmRfUScXTgt9aZT1xlQ' \ --data-urlencode 'token_type_hint=access_token'

  • 通过 refresh_token

 
 

curl --location --request POST 'http://localhost:3000/oauth2/revoke' \ --header 'Authorization: Basic cGlnOnBpZw==' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'token=ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x' \ --data-urlencode 'token_type_hint=refresh_token'

项目源码地址

https://github.com/lltx/auth-server-demo

                                             资源获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

每天学四小时:Java+Spring+JVM+分布式高并发,架构师指日可待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【react】生命周期

组件从创建到死亡会经历一些特定的阶段 React组件中包含一系列勾子函数&#xff08;生命周期回调函数&#xff09;会在特定的时候调用 我们 在定义组件时&#xff0c;会在特定的生命周期回调函数中做特定的工作 一、旧版本的生命周期 1、初始化阶段 constructor()componentWil…

CVE-2022-22965:spring参数绑定漏洞

CVE-2022-22965 博客链接&#xff1a;https://www.blog.23day.site/articles/73 漏洞说明 Spring framework 是Spring 里面的一个基础开源框架&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期,2022年3月31日&#xff0c;VMware Tanzu发布漏洞报告&#xff…

LabVIEW创建自定义书签管理器

LabVIEW创建自定义书签管理器 书签是一种特殊的标记机制&#xff0c;可以添加到VI框图中。任何以井号标签&#xff08;#&#xff09;开头的文本都将被LabVIEW自动识别为书签。这些可用于标记代码不同部分中的待办事项或未完成的任务。当您将主题标签添加框图注释时&#xff0c…

基于java的贪吃蛇游戏-计算机毕业设计

项目介绍 本游戏采用Java环境和Eclipse开发工具&#xff0c;开发了一个界面美观&#xff0c;操作简单并且功能齐全的贪食蛇游戏&#xff0c;整个游戏分为了10个类&#xff0c;实现了游戏的开始、结束、暂停&#xff0c;通过了本游戏的开发&#xff0c;达到了学习Java及Java GU…

使用新路由器有线/无线桥接旧路由器

问题描述 已有一个无线路由器&#xff0c;但信号不能满足需求&#xff0c;遂购买新路由器对其进行桥接。经过在网上搜索和实践&#xff0c;成功配置&#xff0c;将经验记录成帖。 解决方案 无线桥接 1. 打开新路由器设置界面。&#xff08;根据路由器说明说或者网上搜索对应…

新手学python,如何才能更快升职加薪,迎娶白富美,走上人生巅峰

最近在问答里发现好多咨询怎么学习python&#xff0c;或者学习难不难的问题&#xff0c;这里给大家提几点建议&#xff1a; 了解自己的目标 我开始学编程的时候&#xff0c;连基础的知识都不知道&#xff0c;小白的很&#xff01;记得我开始看教材&#xff0c;就是输入“hello…

Vue系列之使用vue init搭建前端项目

文章の目录一、执行 vue init webpack my-project 注意&#xff08;my-project&#xff09;是自己的项目名写在最后前提执行如下代码 npm install -g vue/cli-init一、执行 vue init webpack my-project 注意&#xff08;my-project&#xff09;是自己的项目名 回车既可&…

【时空融合:遥感图像】

MUSTFN: A spatiotemporal fusion method for multi-scale and multi-sensor remote sensing images based on a convolutional neural network &#xff08;MUSTFN&#xff1a;一种基于卷积神经网络的多尺度多传感器遥感影像时空融合方法&#xff09; &#xff08;第一篇关于…

毕业设计-基于大数据的电影爬取与可视化分析系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

zabbix——分布式监控系统

目录 zabbix概述 zabbix 是什么 zabbix 监控原理 zabbix常见的五个程序 zabbix端口号 安装 zabbix 5.0 部署 zabbix 服务端 部署 zabbix 客户端 自定义监控内容 在客户端创建自定义 key 在 Web 页面创建自定义监控项模板 zabbix 自动发现与自动注册 zabbix 自动发…

第十四届蓝桥杯集训——if——配套基础示例

第十四届蓝桥杯集训——if——配套基础示例 目录 第十四届蓝桥杯集训——if——配套基础示例 例题1&#xff1a;三角形任意两边之和大于第三边 例题2&#xff1a;判断回文数 例题3&#xff1a;狗的年龄 例题4&#xff1a;帐密登录 例题1&#xff1a;三角形任意两边之和大于…

UOS系统搭建NTP服务

做这题的前提是先把ispsrv的dns配置完善 NTP 安装 ntp&#xff08;使用其他 ntp 软件&#xff0c;以下功能均不得分&#xff09;&#xff1b; 在 AppSrv 和 StorageSrv 上创建 CRON 计划任务&#xff1b; 使用 ntpdate 指令&#xff0c;每隔五分钟进行一次时间同步。 截图实现…

功能胶膜行业发展趋势:政策、需求叠加技术驱动 未来市场发展空间大

OCA光学胶膜、半导体制造用胶膜等均属于功能胶膜。我国功能胶膜行业发展趋势如下&#xff1a; 1、政策陆续出台&#xff0c;将不断夯实功能胶膜行业发展基础 近年来&#xff0c;国家出台了一系列相关政策来推动功能胶膜行业发展与进步&#xff0c;尤其是在2019年&#xff0c;国…

uniCloud云开发之创建创建一个uniapp项目并关联uniCloud

uniCloud云开发之创建创建一个uniapp项目前言1.下载最新版的HBuilderX&#xff0c;并创建一个uniCloud的项目2、关联云服务空间3、会出来需要登录没有登录的去注册一个就好了&#xff0c;然后新建4、这样就关联好云数据库了5、创建云函数6、调用云函数&#xff08;1&#xff09…

十分钟就能上手Prometheus与Grafana监控SpringBoot项目

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN原力作者&#xff0c;后端领域优质创作者&#xff0c;热爱分享创作 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f525; …

深度学习——微调笔记+代码

1.微调在深度学习中计算机视觉最重要的技术&#xff0c;微调也是迁移学习 2.标注一个数据集很贵 ①ImageNet标注了1000多万张图片&#xff0c;实际使用120万张图片&#xff0c;类别是1000&#xff0c;大型数据集 ②Fashion-MNIST一共有6万张图片&#xff0c;类别是10&#xf…

matlab:鼠标循环点击器

目录简介使用说明板块1采点板块作用名称解释板块2坐标板块作用名称解释板块3历史数据板块作用名称解释板块4循环点击板块作用名称解释程序附注简介 采集PC端一个或是多个点的位置坐标&#xff0c;对这些位置可以按照次序循环点击。&#xff08;之前玩阴阳师的时候&#xff0c;…

动态规划问题——矩阵的最小路径和

题目&#xff1a; 给定一个矩阵m&#xff0c;从左上角开始每次只能向右或者向下走&#xff0c;最后到达右下角的位置&#xff0c;路径上所有的数字累加起来就是路径和&#xff0c;返回所有路径中最小的路径和。 示例&#xff1a; 给定的m如下&#xff1a; 1 3 …

灌区信息化管理系统解决方案 灌区用水量测系统介绍

平升电子灌区信息化管理系统解决方案/灌区用水量测系统&#xff0c;对灌区的渠道水位、流量、水雨情、土壤墒情、气象等信息进行监测&#xff0c;同时对泵站、闸门进行远程控制&#xff0c;对重点区域进行视频监控&#xff0c;实现了信息的采集、统计、分析、控制等功能&#x…

我国均温板行业发展趋势:5G手机领域需求强劲 今年市场空间或超15亿

均温板&#xff08;VaporChamber&#xff09;技术从原理上类似于热管&#xff0c;但在传导方式上有所区别。热管为一维线性热传导&#xff0c;而真空腔均热板中的热量则是在一个二维的面上传导&#xff0c;因此效率更高。具体来说&#xff0c;真空腔底部的液体在吸收芯片热量后…