系列文章目录

【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)相关推荐

  1. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  2. docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  3. Web阅读器开发系列教程(入门篇)

    作者:Sam 前言 最近我在慕课网发布了两门关于Web阅读应用开发的课程,采用Vue全家桶开发.免费课是入门级课程,初步实现了一个阅读器.实战课是进阶课程,实现了一个高性能的互联网阅读应用.两个项目都 ...

  4. 八十九、Python的GUI系列 | 使用PyQt5 快速构建一个GUI 应用

    @Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  5. 【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密,beanshell,jdbc,jmeter+ant+jenkins

    目录 [本文简介看之前请详细的看完介绍] 本文是全网首发的[全栈接口测试进阶系列教程]jmeter接口测试工具从入门到入职, 接口系列包含 接口测试系列包含所有的接口测试工具入门到入职,如果你喜欢的话 ...

  6. 报表 labview_【LabVIEW懒人系列教程小白入门】1.3LabVIEW数据类型

    上期作业解答: 如何对齐控件(动图) 第一种方法: 第二种方法: 第三种方法: 第四种方法: 大家尝试至少用第一种方法编写出该题. 作业讲解结束 labview中需要熟悉的控件类型有: 基本数据类型: ...

  7. 【LabVIEW懒人系列教程-小白入门】1.13LabVIEW程序结构之事件结构

    上期1.2作业讲解: 下面是效果演示: 今日讲解程序框图中的事件结构运用方式, 事件结构必须要存在超时事件分支,否则程序会报错且无法执行 顾名思义,事件结构就是满足某个事件执行对应事件的功能分支,事件 ...

  8. 【LabVIEW懒人系列教程-小白入门】1.15LabVIEW程序结构之跑马灯

    上期1.14作业讲解: 本期教大家如何利用程序结构编写小程序<跑马灯> 程序要求,多数布尔灯依次排序,按照从左往右的顺序进行亮灭操作. 如图: 方法①/利用While循环组合顺序结构实现 ...

  9. 【LabVIEW懒人系列教程-小白入门】1.16LabVIEW程序结构之小试身手

    上期1.15作业讲解: <分数序列求和> For循环组合移位寄存器实现计算: 本期带来两个习题,主要目的:运用前期所学知识点进行反复练习,提高对于函数运用的熟练度,了解Labview程序组 ...

最新文章

  1. python opencv按照一定间隔保存视频帧
  2. 超18万人次下载使用的 Cloud Toolkit 的成长历程
  3. 前端多图片上传怎么控制顺序_Web前端经典面试题有哪些 如何能走向高薪之路...
  4. 绝地求生信号服务器崩溃,绝地求生奔溃怎么办 吃鸡游戏崩溃解决方法
  5. MyBatis从入门到精通(五)—MyBatis插件原理探究和自定义插件实现
  6. EXCEL和公式里的 通配符
  7. 华三交换机配置vrrp_H3C S5830V2[S5820V2]系列以太网交换机 典型配置举例-Release 24xx系列-6W100_VRRP典型配置举例-新华三集团-H3C...
  8. java 解密pdf文件,PDFBox加密和解密PDF文件
  9. unshift() 方法php,unshift方法怎么使用
  10. 利用python实现蚂蚁森林自动偷能量
  11. 文件碎片/磁盘碎片的一些知识
  12. 【Cadence17.2】Padstack Editor制作焊盘和过孔
  13. java循环求阶乘_在Java中用循环求阶乘
  14. 电子小制作:手机控制的收音机
  15. 终于有人把“嵌入式人工智能”讲明白了
  16. 威纶和s7200通讯线_S7-200与威纶通触摸屏之间的通讯.doc
  17. EasyRoad3D简易使用手册
  18. 2019辽宁公务员考试行测常识大全:公务员常识40000问(四十九)
  19. 【MOMO】高水平期刊目录(持续更新)
  20. 自动驾驶仿真:ECU TEST自动化测试常用API调用

热门文章

  1. Dynamics CRM: XrmToolBox插件推荐
  2. php生成艺术签名 下
  3. idea 批量修改同一列_idea替换快捷键,批量处理对象的操作
  4. 一种针对夏克哈特曼波前传感器质心数据求解波前斜率的处理方法
  5. 调试器(二) cmsis-dap
  6. js(JavaScript)高级
  7. 如何制作高大上的PPT--搜索出真知
  8. 能源互联网从何而来?
  9. 视觉显著性发展与现状——本科毕业设计总结
  10. 华为鸿蒙系统使用机型,华为鸿蒙系统支持哪些手机型号?华为鸿蒙系统开放机型大全_专题_53货源网...