【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)
系列文章目录
【spring authorization server系列教程】(一)入门系列,快速构建一个授权服务器
文章目录
- 系列文章目录
- 前言
- 一、目前已实现的功能
- 二、入门,一步一步快速开始构建一个简单的认证服务器
- 1.创建springboot项目并引入依赖
- 2.配置SecurityConfig
- 3.配置application.yml
- 到这里就配置完成了。。。。。。。。。。。。。。。。。。。。。。。。。。。初始配置简单的一个配置就够了。下面开始进行测试
- 总结
前言
spring authorization server是spring团队最新的认证授权服务器,之前的oauth2后面会逐步弃用。不过到现在发文的时候,我看到官网已经把之前oauth2仓库废弃了。
现在spring authorization server已经到生产就绪阶段了,不过目前项目还没有完全到生产可用阶段。
springsecurityoauth迁移到新的授权服务器指南 https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide
spring authorization server官方demo https://github.com/spring-projects/spring-authorization-server
上篇文章也有集成jdbc例子https://blog.csdn.net/qq_35270805/article/details/123125144
一、目前已实现的功能
Spring Authorization Server 支持以下特性:
授权方式
授权码
用户同意
客户凭证
刷新令牌
OAuth 2.1 授权框架(草案)
授权码授予
客户凭证授予
刷新令牌授予
OpenID Connect Core 1.0(规范)
- 授权码流程
令牌格式
自包含 (JWT)
参考(不透明)
JSON Web 令牌 (JWT) ( RFC 7519 )
JSON Web 签名 (JWS) ( RFC 7515 )
客户端认证
client_secret_basic
client_secret_post
client_secret_jwt
private_key_jwt
none(公众客户)
OAuth 2.1 授权框架(客户端身份验证)
用于 OAuth 2.0 客户端身份验证的 JSON Web 令牌 (JWT) 配置文件 ( RFC 7523 )
OAuth 公共客户端 (PKCE) 的代码交换证明密钥 ( RFC 7636 )
协议端点
OAuth2 授权端点
OAuth2 令牌端点
OAuth2 令牌自省端点
OAuth2 令牌撤销端点
OAuth2 授权服务器元数据端点
JWK 设置端点
OpenID Connect 1.0 提供者配置端点
OpenID Connect 1.0 用户信息端点
OpenID Connect 1.0 客户端注册端点
OAuth 2.1 授权框架(草案)
授权端点
令牌端点
OAuth 2.0 令牌自省 ( RFC 7662 )
OAuth 2.0 令牌撤销 ( RFC 7009 )
OAuth 2.0 授权服务器元数据 ( RFC 8414 )
JSON 网络密钥 (JWK) ( RFC 7517 )
OpenID Connect Discovery 1.0(规范)
- 提供者配置端点
OpenID Connect Core 1.0(规范)
- 用户信息端点
OpenID Connect 动态客户端注册 1.0(规范)
客户注册端点
客户端配置端点
从上面官方表可以看出,协议是最新的oauth2.1协议。因为协议变更了,所以最新版本也就没有了密码模式授权
二、入门,一步一步快速开始构建一个简单的认证服务器
1.创建springboot项目并引入依赖
Spring Authorization Server 可以在您已经使用Spring Security的任何地方使用。
开始使用 Spring Authorization Server 的最简单方法是创建基于Spring Boot的应用程序。您可以使用start.spring.io生成基本项目或使用默认授权服务器示例作为指导。然后将 Spring Authorization Server 添加为依赖项,如下例所示:
<!--spring-authorization-server依赖--><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</artifactId><version>0.3.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
截至目前为止最新版本为0.3.0
2.配置SecurityConfig
代码如下:
*** @author resthx* @date 9:21 2022/6/7*/
@Configuration
public class SecurityConfig {/*** 端点的 Spring Security 过滤器链* @param http* @return* @throws Exception*/@Bean@Orderpublic SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http)throws Exception {OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);//未通过身份验证时重定向到登录页面授权端点http.exceptionHandling((exceptions) -> exceptions.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));return http.build();}/*** 用于身份验证的 Spring Security 过滤器链* @param http* @return* @throws Exception*/@Bean@Orderpublic SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)throws Exception {http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())//表单登录处理从授权服务器过滤器链.formLogin(Customizer.withDefaults());return http.build();}/*** 配置UserDetails* @return*/@Beanpublic UserDetailsService userDetailsService() {//这里用固定的用户,后续改成从数据库查询UserDetails userDetails = User.withDefaultPasswordEncoder().username("admin").password("111111").roles("USER").build();return new InMemoryUserDetailsManager(userDetails);}/*** 返回注册客户端资源,注意这里采用的是内存模式,后续可以改成jdbc模式。RegisteredClientRepository用于管理客户端的实例。* @return*/@Beanpublic RegisteredClientRepository registeredClientRepository() {RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString()).clientId("messaging-client").clientSecret("{noop}secret").clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC).authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE).authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN).authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).redirectUri("http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc").redirectUri("http://www.baidu.com").scope(OidcScopes.OPENID).scope("message.read").scope("message.write").clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build()).build();return new InMemoryRegisteredClientRepository(registeredClient);}/*** 生成jwk资源,com.nimbusds.jose.jwk.source.JWKSource用于签署访问令牌的实例。* @return*/@Beanpublic JWKSource<SecurityContext> jwkSource() {KeyPair keyPair = generateRsaKey();RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();RSAKey rsaKey = new RSAKey.Builder(publicKey).privateKey(privateKey).keyID(UUID.randomUUID().toString()).build();JWKSet jwkSet = new JWKSet(rsaKey);return new ImmutableJWKSet<>(jwkSet);}/*** 生成密钥对,启动时生成的带有密钥的实例java.security.KeyPair用于创建JWKSource上述内容* @return*/private static KeyPair generateRsaKey() {KeyPair keyPair;try {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);keyPair = keyPairGenerator.generateKeyPair();}catch (Exception ex) {throw new IllegalStateException(ex);}return keyPair;}/*** ProviderSettings配置 Spring Authorization Server的实例* @return*/@Beanpublic ProviderSettings providerSettings() {return ProviderSettings.builder().build();}}
3.配置application.yml
server:port: 9600
到这里就配置完成了。。。。。。。。。。。。。。。。。。。。。。。。。。。初始配置简单的一个配置就够了。下面开始进行测试
这里我们只测试授权码模式。其他模式这里就不测试了
浏览器访问http://127.0.0.1:9600/oauth2/authorize?client_id=messaging-client&response_type=code&scope=message.read&redirect_uri=http://www.baidu.com
会跳转到登录页面
输入配置中的账户名密码,然后就跳转到认证页面了
勾选上message.read,然后点击提交
就跳转到百度然后后面带上了code
然后再用postman请求,像我这样配置
code替换成跳转路径后面那个
发送请求
这时候服务器就饭后了token
总结
以上就是今天要讲的内容,本文介绍了spring authorization server,还有他的简单上手demo。后面我会出这系列后续教程,,如何定制页面,更多的相关配置介绍,喜欢可以收藏一下,后续更新
【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)相关推荐
- eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...
- docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- Web阅读器开发系列教程(入门篇)
作者:Sam 前言 最近我在慕课网发布了两门关于Web阅读应用开发的课程,采用Vue全家桶开发.免费课是入门级课程,初步实现了一个阅读器.实战课是进阶课程,实现了一个高性能的互联网阅读应用.两个项目都 ...
- 八十九、Python的GUI系列 | 使用PyQt5 快速构建一个GUI 应用
@Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- 【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密,beanshell,jdbc,jmeter+ant+jenkins
目录 [本文简介看之前请详细的看完介绍] 本文是全网首发的[全栈接口测试进阶系列教程]jmeter接口测试工具从入门到入职, 接口系列包含 接口测试系列包含所有的接口测试工具入门到入职,如果你喜欢的话 ...
- 报表 labview_【LabVIEW懒人系列教程小白入门】1.3LabVIEW数据类型
上期作业解答: 如何对齐控件(动图) 第一种方法: 第二种方法: 第三种方法: 第四种方法: 大家尝试至少用第一种方法编写出该题. 作业讲解结束 labview中需要熟悉的控件类型有: 基本数据类型: ...
- 【LabVIEW懒人系列教程-小白入门】1.13LabVIEW程序结构之事件结构
上期1.2作业讲解: 下面是效果演示: 今日讲解程序框图中的事件结构运用方式, 事件结构必须要存在超时事件分支,否则程序会报错且无法执行 顾名思义,事件结构就是满足某个事件执行对应事件的功能分支,事件 ...
- 【LabVIEW懒人系列教程-小白入门】1.15LabVIEW程序结构之跑马灯
上期1.14作业讲解: 本期教大家如何利用程序结构编写小程序<跑马灯> 程序要求,多数布尔灯依次排序,按照从左往右的顺序进行亮灭操作. 如图: 方法①/利用While循环组合顺序结构实现 ...
- 【LabVIEW懒人系列教程-小白入门】1.16LabVIEW程序结构之小试身手
上期1.15作业讲解: <分数序列求和> For循环组合移位寄存器实现计算: 本期带来两个习题,主要目的:运用前期所学知识点进行反复练习,提高对于函数运用的熟练度,了解Labview程序组 ...
最新文章
- python opencv按照一定间隔保存视频帧
- 超18万人次下载使用的 Cloud Toolkit 的成长历程
- 前端多图片上传怎么控制顺序_Web前端经典面试题有哪些 如何能走向高薪之路...
- 绝地求生信号服务器崩溃,绝地求生奔溃怎么办 吃鸡游戏崩溃解决方法
- MyBatis从入门到精通(五)—MyBatis插件原理探究和自定义插件实现
- EXCEL和公式里的 通配符
- 华三交换机配置vrrp_H3C S5830V2[S5820V2]系列以太网交换机 典型配置举例-Release 24xx系列-6W100_VRRP典型配置举例-新华三集团-H3C...
- java 解密pdf文件,PDFBox加密和解密PDF文件
- unshift() 方法php,unshift方法怎么使用
- 利用python实现蚂蚁森林自动偷能量
- 文件碎片/磁盘碎片的一些知识
- 【Cadence17.2】Padstack Editor制作焊盘和过孔
- java循环求阶乘_在Java中用循环求阶乘
- 电子小制作:手机控制的收音机
- 终于有人把“嵌入式人工智能”讲明白了
- 威纶和s7200通讯线_S7-200与威纶通触摸屏之间的通讯.doc
- EasyRoad3D简易使用手册
- 2019辽宁公务员考试行测常识大全:公务员常识40000问(四十九)
- 【MOMO】高水平期刊目录(持续更新)
- 自动驾驶仿真:ECU TEST自动化测试常用API调用
热门文章
- Dynamics CRM: XrmToolBox插件推荐
- php生成艺术签名 下
- idea 批量修改同一列_idea替换快捷键,批量处理对象的操作
- 一种针对夏克哈特曼波前传感器质心数据求解波前斜率的处理方法
- 调试器(二) cmsis-dap
- js(JavaScript)高级
- 如何制作高大上的PPT--搜索出真知
- 能源互联网从何而来?
- 视觉显著性发展与现状——本科毕业设计总结
- 华为鸿蒙系统使用机型,华为鸿蒙系统支持哪些手机型号?华为鸿蒙系统开放机型大全_专题_53货源网...